python模块导入的细节详解

Python模块导入的细节详解

在 Python 中,一个模块是一个包含了 Python 定义和语句的文件。模块能够被别的程序引入,这样就可以使用模块中的函数,类和变量等资源。Python 模块的导入方式有三种:

  • import 模块名
  • import 模块名 as 别名
  • from 模块名 import 模块元素名

模块搜索路径

在模块导入时,Python 会从各种目录和位置去寻找模块,这些目录和位置被称为搜索路径(search path),Python 解释器根据搜索路径来定位模块文件,搜索路径按照如下顺序查找:

  1. 内置模块
  2. sys.path 变量指定的目录
  3. PYTHONPATH 环境变量指定的目录
  4. 默认目录和 PYTHONPATH 未定义时的兜底目录

模块导入机制

Python 会在内存中存储已经导入的模块,这是为了避免多次导入同一个模块,导致重复执行模块初始化代码。

当模块被导入时,Python 解释器会执行该模块的代码。而且这个且只有一次。如果在 Python 解释器退出以后再次导入该模块,解释器会直接加载内存缓存,避免再次执行模块代码。

从模块导入的角度来看,Python 中一个模块(.py 文件)就是一个名称空间(namespace)。在这个名称空间中,可以使用所有模块内的函数、变量和因素等。

示例一

下面的示例介绍了如何导入一个模块,并使用其中的函数和变量:

# 导入Python内置模块math
import math

# 导入math模块中的pi
from math import pi

# 使用math模块中的sqrt函数
print(math.sqrt(2))

# 使用math模块中常量pi
print(pi)

# 更改导入模块的名称,将math模块的别名设置为 m
import math as m
print(m.sqrt(2))

输出结果:

1.4142135623730951
3.141592653589793
1.4142135623730951

示例二

下面的示例演示模块搜索路径和模块缓存:

假设我们有一个模块 utils.py,内容如下:

# utils.py
NAME = "utils"

def get_name():
    return NAME

我们创建一个脚本 main.py,当中导入该模块两次:

# main.py
import sys
import os
import utils

sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), "..")))
import utils

print(utils.get_name())

在模块导入路径搜索规则中,第一条是内置模块,不在搜索路径中。直接从 utils 模块文件中导入相应的模块。第二次导入时,该模块已经被缓存,直接从缓存中读取。

输出结果:

utils

结论

了解 Python 模块导入机制和模块搜索路径机制对于我们编写高质量代码是非常有帮助的。编写 Python 代码的时候,应该按照 Python 的模块导入约定以及模块搜索路径去编写并组织自己的 Python 代码。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python模块导入的细节详解 - Python技术站

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

相关文章

  • Python:使用由类组成的列表时,for循环和输入失败

    【问题标题】:Python: for loops and inputs fail when using a list made of classesPython:使用由类组成的列表时,for循环和输入失败 【发布时间】:2023-04-04 01:06:02 【问题描述】: class products: def __init__(self, id, siz…

    Python开发 2023年4月6日
    00
  • 用什么库写 Python 命令行程序(示例代码详解)

    使用Python编写命令行程序的时候,我们需要使用第三方库来实现。下面是可供参考的几个常用的Python库: argparse:argparse是Python内置的标准模块,提供了非常方便和简单的命令行解析方法。具体使用方法可见下面的示例1。 docopt:docopt 是一个使用 docstring 来解析命令行参数的库。它非常简单,不需要引用冗长的文档来…

    python 2023年5月31日
    00
  • 详解Python 实例方法、类方法和静态方法

    当我们创建一个Python类时,常常需要在该类中定义一些方法。Python支持三种不同类型的类方法:实例方法、类方法和静态方法。每种类型的方法都有其自己的使用场景,下面我会详细讲解这三种方法的定义和使用方法。 实例方法 实例方法是最常用的方法,在实例方法中,我们访问和修改实例对象的属性。它的第一个参数是self,代表实例对象。我们必须在使用时提供该参数,调用…

    python-answer 2023年3月25日
    00
  • 如何使用Python实现ORM框架?

    以下是使用Python实现ORM框架的完整攻略。 ORM框架简介 ORM(Object-Relational Mapping)框架是一种将对象模型和关系数据库之间的映射技术。ORM框架可以将数据库中的映射为Python中的类,将表中的行映射为类的实例,将表中的列映射为类的属性。ORM框架可以使开发人员更加方便地操作数据库,而需要编写复杂的SQL语句。 步骤1…

    python 2023年5月12日
    00
  • 使用PyCharm配合部署Python的Django框架的配置纪实

    下面是使用PyCharm配合部署Python的Django框架的配置纪实的具体攻略,包括以下几个步骤: 1. 安装Python 在安装PyCharm之前,首先需要安装Python。可以到 Python官网 下载最新版本的Python,并按照安装向导进行安装。 2. 安装PyCharm 可以到 PyCharm官网 下载最新版本的PyCharm,并按照安装向导进…

    python 2023年5月13日
    00
  • 基于Python制作一个简单的文章搜索工具

    下面是制作一个简单文章搜索工具的完整攻略。 步骤一:准备工作 在开始我们的编码之前,我们需要先准备好工作环境。以下是具体步骤。 安装Python:打开python官网(https://www.python.org/),选择最新的Python版本进行安装。 安装必要的库:在命令行或终端中输入以下命令,安装所需的库。 python pip install who…

    python 2023年6月13日
    00
  • Python自动化测试PO模型封装过程详解

    一、Python自动化测试PO模型封装过程详解 什么是PO模型 PO(Page Object)模型是自动化测试中广泛使用的一种设计模式,它主要针对UI层面进行封装,将每一个页面或者每一个模块抽象成一个对象(类),通过封装页面对象的属性和方法,使得测试代码更加简洁、可维护、易复用。 PO模型的封装过程 (1)确定需求:首先,需要明确待测试系统的需求和业务逻辑,…

    python 2023年5月19日
    00
  • Python爬虫辅助利器PyQuery模块的安装使用攻略

    下面是针对“Python爬虫辅助利器PyQuery模块的安装使用攻略”的详细讲解: 1. 模块介绍 PyQuery是一个Python库,它模拟了jQuery的语法来解析HTML和XML文件,让你可以使用jQuery的方式来操作文档内容。PyQuery库非常适合做数据抓取和文档解析。 2. 安装PyQuery 为了使用PyQuery,我们首先需要安装这个库。可…

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