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爬虫,获取,解析,存储详解

    Python爬虫获取、解析、存储详解 准备工作 在开始爬虫之前,我们需要确保自己安装了以下两个库: requests:用于发送HTTP请求和获取响应数据 BeautifulSoup4:解析HTML/XML数据 安装方式,可以使用pip命令进行安装: pip install requests pip install beautifulsoup4 获取数据 在使…

    python 2023年5月14日
    00
  • 详解Python从字典中删除重复元素

    下面是Python程序从字典中删除重复元素的完整攻略。 标题 1. 什么是字典 Python中的字典是一种无序的数据类型,用于存储键-值(key-value)对。每个键必须是唯一的,但值可以重复。字典用大括号{}表示,键值对之间用冒号:分隔。 2. 从字典中删除重复元素 Python中可以使用set()和dict()函数来实现从字典中删除重复元素的操作。具体…

    python-answer 2023年3月25日
    00
  • Python3实现的字典、列表和json对象互转功能示例

    Python3实现字典、列表和JSON对象互转功能示例 1.背景 在Python编程中,字典、列表和JSON对象是常用的数据结构。这些数据结构在不同的场景下都有不同的用途,而且在实际应用中也需要进行互相转换。因此,学会如何在它们之间进行转换是非常重要的,也是我们必须掌握的基本操作。 2.实现方法 将一个字典或列表对象转换为JSON对象可以通过Python中的…

    python 2023年5月13日
    00
  • python 中raise用法

    当Python执行期间发生某些异常错误,可以使用raise语句来引发异常。通过raise语句抛出的异常必须是某个已定义异常类的实例,或是某个继承自Exception类的实例。这里是关于Python中raise用法的详细攻略。 什么是Python中的raise? raise语句通常用于抛出一个异常。当出现某种错误时,可以使用raise语句抛出异常并终止程序,可…

    python 2023年5月13日
    00
  • 改变给定的numpy数组的数据类型

    改变给定的numpy数组的数据类型,一般分为以下几个步骤: 使用numpy中的astype()函数将数组数据类型改变为指定的数据类型。 对于在修改数据类型过程中出现的数据精度丢失问题,需要使用numpy中的around()函数对数据进行四舍五入。 下面我们结合两个实例详细讲解该过程。 实例1 我们需要将一个int类型的numpy数组转换为float类型的nu…

    python-answer 2023年3月25日
    00
  • Python 输入一个数字判断成绩分数等级的方法

    题目要求输入一个数字判断成绩分数等级,我们可以通过Python的if语句来实现。下面是详细的实现方法。 1. 接收用户输入 我们可以使用Python内置函数input()来接收用户输入的数字,具体实现代码如下: score = input("请输入成绩:") 2. 判断成绩等级 接下来我们需要对输入的成绩进行判断,判断的依据是分数的大小,…

    python 2023年6月5日
    00
  • Python实现机器学习算法的分类

    下面是关于“Python实现机器学习算法的分类”的完整攻略。 1. 机器学习算法分类 机器学算法可以分为监督学习、无监督学习和半监督学习三类。 1.1 监督学习 监督学习是指从标记数据中学习预测模型的过程。在监督学习中,我们需要提供带有标的训练数据,然后使用这些数据训练模型,最后使用模型对新数据进行预测。常用的监督学习算法括决策树、支持向量机、朴素贝叶斯、逻…

    python 2023年5月13日
    00
  • PHP webshell检查工具 python实现代码

    下面是详细的攻略: PHP Webshell检查工具Python实现代码 PHP Webshell是一种常见的黑客攻击工具,可以用于远程控制服务器。为了保护服务器安全,我们需要使用PHP Webshell检查工具来检测服务器上是否存在Webshell。本文将介绍如何使用Python实现PHP Webshell检查工具。 实现步骤 PHP Webshell检查…

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