python之import机制详解

Python之Import机制详解

简介

在Python中,import语句是用来导入一个模块或者包的。在使用import语句时,Python会根据一定的搜索路径来查找相应的模块或包。在本文中,我们将介绍Python中的import机制,包括搜索路径、名称解析以及import语句的内部执行过程。

搜索路径

当Python执行import语句时,它会按照一定的搜索路径来查找相应的模块或包。默认情况下,搜索路径包括以下几个部分:

  1. 程序主目录
  2. PYTHONPATH环境变量指定的目录
  3. 第三方库目录
  4. Python系统默认的库目录

可以通过以下代码获取Python的搜索路径:

import sys
print(sys.path)

对于其中的每个目录,Python会按照以下顺序搜索其中的模块:

  1. 如果该目录中存在与模块名相同的目录,则继续搜索该目录中的子目录和文件。
  2. 如果该目录中存在与模块名相同的文件,则直接导入该文件。
  3. 如果该目录中不存在与模块名相同的目录或文件,则继续搜索下一个目录。

名称解析

在Python中,import语句有多种形式。例如:

import mod
from mod import func

在这些语句中,模块名和函数名都是一个标识符(identifier)。当Python遇到一个标识符时,它会按照以下的顺序进行名称解析:

  1. 当前作用域(scope)范围内是否有该名称定义。
  2. 如果当前作用域内没有该名称,则搜索上级(enclosing)作用域以查找该名称。
  3. 继续向上查找,直到查找到全局作用域(global scope)。
  4. 如果在全局范围内也无法找到该名称,则Python会抛出NameError异常。

import语句的内部执行过程

当我们执行import语句时,实际上发生了一系列的操作。具体来说,Python会进行以下的过程:

  1. 尝试在内存中查找已经加载的模块,如果已经加载则直接返回该模块对象,否则执行下一步。
  2. 执行名称解析过程,查找要导入的模块或包,并将其存储到内存中的某个位置。
  3. 执行模块中的代码,初始化其中定义的变量、函数等内容,并将结果存储到内存中的模块对象中。
  4. 返回该模块对象作为该import语句的结果。

示例说明

示例一:使用import导入模块

首先,我们创建一个模块文件mymodule.py:

def hello():
    print("Hello, world!")

然后,我们在另一个文件中使用import语句导入该模块:

import mymodule

mymodule.hello()

当我们执行这个文件时,Python会首先查找mymodule,按照搜索路径查找到该模块文件,并执行其中的代码。最终,调用mymodule.hello()实现输出Hello, world!的效果。

示例二:使用from import导入函数

我们再次使用mymodule.py中的代码,在另一个文件中使用from import来导入mymodule模块中的hello函数:

from mymodule import hello

hello()

和之前类似,Python会查找mymodule文件,并执行其中的代码。在执行完代码后,查找hello函数,并将其存储到内存中。最终,调用hello()便能够输出Hello, world!。

结论

Python的Import机制是一个非常灵活、高效的载入机制,在Python编程中得到了广泛的应用。当我们使用import语句时,需要明确搜索路径、名称解析等相关知识,才能够正确地载入所需的模块和函数。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python之import机制详解 - Python技术站

(0)
上一篇 2023年6月3日
下一篇 2023年6月3日

相关文章

  • Python Selenium自动化获取页面信息的方法

    Python Selenium是一个自动化测试工具,可以模拟用户在浏览器中的操作,例如点击、输入、滚动等。在Python中,我们可以使用Selenium库来实现自动化获取页面信息的功能。本攻略将介绍如何使用Python Selenium自动化获取页面信息的方法。 1. 安装Python库 我们需要安装Python的Selenium库。可以使用以下命令进行安装…

    python 2023年5月15日
    00
  • 教你怎么用python爬取爱奇艺热门电影

    爬取网站数据是Python编程中的一个重要应用场景,本攻略将介绍如何使用Python爬取爱奇艺热门电影的数据。 步骤一:分析网站 在爬取网站数据之前,我们需要先分析网站的结构和数据。在本例中,我们需要分析爱奇艺热门电影页面的HTML结构和数据格式。 我们可以使用Chrome浏览器的开发者工具来分析网站。打开Chrome浏览器,进入爱奇艺热门电影页面,右键点击…

    python 2023年5月15日
    00
  • Python实现将Excel转换为json的方法示例

    这里是一个详细的Python实现将Excel转换为JSON的示例教程。 准备工作 在开始之前,需要安装以下库: Pandas:可以帮助读取 Excel 文件。 json:将 Pandas 数据转换为 JSON。 首先需要在命令行中执行以下代码安装 pandas 和 json 库: pip install pandas pip install json 示例 …

    python 2023年5月13日
    00
  • Python/Pandas:根据共同的行标识符和唯一的行列组合从不同的数据帧中划分数字列

    【问题标题】:Python/Pandas: Divide numeric columns from different dataframes based on a common row identifier and unique row-col combinationPython/Pandas:根据共同的行标识符和唯一的行列组合从不同的数据帧中划分数字列 【…

    Python开发 2023年4月5日
    00
  • Python 变量类型实例详解

    Python 变量类型实例详解 Python 是一种动态类型语言,它会在运行过程中自动确定变量的类型。Python 中的变量类型包括数字、字符串、列表、元组、集合和字典。本文将详细介绍 Python 中的变量类型,并给出一些实例说明。 数字类型 Python 中的数字类型包括整数、浮点数和复数。下面是一些数字类型的实例: 整数类型 整数是 Python 中最…

    python 2023年5月14日
    00
  • Python 音视频剪辑快速入门教程

    Python 音视频剪辑快速入门教程 简介 Python 是一种跨平台的编程语言,拥有丰富的模块和库,可以用于开发各种类型的应用,包括音视频剪辑。 本文将介绍使用 Python 进行音视频剪辑的基本流程和常用库,包括 FFmpeg、MoviePy 和 PyDub。同时,也会结合示例,讲解其具体用法和实现。 安装 在使用 Python 进行音视频剪辑前,需要先…

    python 2023年5月19日
    00
  • 在Python中使用NumPy将赫米特数列与自变量相乘

    下面将详细讲解在Python中使用NumPy将赫米特数列与自变量相乘的完整攻略。 什么是赫米特数列? 赫米特数列是指一系列以赫米特多项式作为系数的数列,其形式为: $${\displaystyle H_{n}(x)=(-1)^{n}e^{\frac{x^{2}}{2}}{\frac {d^{n}}{dx^{n}}}e^{-{\frac {x^{2}}{2}}…

    python-answer 2023年3月25日
    00
  • Scrapy爬虫框架集成selenium及全面详细讲解

    Scrapy爬虫框架集成selenium及全面详细讲解 Scrapy是一个非常流行的Python爬虫框架,可以帮助我们快速、高效地爬取网站数据。但是,有些网站使用了JavaScript技术,需要使用selenium等工具来模拟浏览器行为才能获取到数据。本文将介绍如何在Scrapy中集成selenium,并提供两个示例。 安装selenium 在使用selen…

    python 2023年5月15日
    00
合作推广
合作推广
分享本页
返回顶部