Python进阶之import导入机制原理详解

Python进阶之import导入机制原理详解

简介

在 Python 中,我们经常需要导入其他模块中的代码以完成各种任务。Python 的 import 机制是实现这一功能的重要手段,可谓是 Python 中非常重要的一部分。通过本篇文章,我们将会具体讲解 Python 的 import 机制原理。

Python import 的分类

Python 中的 import 机制主要可以分为以下几类:

绝对路径导入

当我们想要从 Python 模块搜索路径中直接导入某个模块时,这样的 import 就被称为绝对路径导入。例如:

import module1
from package1 import module2

上述代码中,module1module2 都是绝对路径导入。

相对路径导入

当我们需要从相对路径中导入模块时,我们可以使用相对路径导入。常用的相对路径导入有两类:

  • 单点相对导入:以单个句点(.)开头表示当前包中的模块。例如 from .module1 import func1
  • 双点相对导入:以双个句点(..)开头表示当前模块的父包中的模块。例如 from ..module1 import func1

动态导入

如果我们不确定需要导入哪个模块,可以使用动态导入。例如:

module_name = "module1"
module1 = __import__(module_name)

上述代码中,我们动态地计算出需要导入的模块名 module_name,并使用 Python 自带的 __import__ 函数动态地导入了模块 module1

Python import 的搜索路径

在 Python 中,模块有一个搜索路径列表,Python 会根据这个列表来搜索需要导入的模块。

搜索路径列表的顺序是:

  1. 程序的主目录(即主程序所在的目录)。
  2. 环境变量 PYTHONPATH 包含的所有目录。PYTHONPATH 中的每个目录都将被添加到搜索路径中。
  3. 标准库所在目录。
  4. 任何 .pth 文件中所列出的目录。
  5. 默认情况下,Python 安装后自带的一些目录。

我们可以使用 Python 的 sys.path 属性来查看搜索路径列表。例如:

import sys
print(sys.path)

Python import 的执行流程

Python 的 import 语句实际上是一个复合语句,它包括两个步骤:

  1. 搜索模块。
  2. 将搜索到的模块载入内存,并将其指定给变量。

搜索模块的过程实际上就是 Python 从搜索路径列表中找到需要导入的模块的过程,Python 内部使用了一个名为 __import__() 的函数来实现这个过程。

具体来说,__import__() 函数会根据导入的模块名逐级向下搜索,直到找到所需的模块或者抛出未找到模块异常 ModuleNotFoundError 为止。

在找到所需的模块之后,Python 会执行这些模块中的代码并将其中的对象放入内存中。这些对象包括模块级别的属性、函数、类等。当运行到 import 语句时,这些对象会被加载到 Python 的内存中,并将其指定给对应的变量。

示例说明

我们通过两个示例来说明 Python 的 import 机制。

示例 1:绝对路径导入

假设我们有以下目录结构:

project/
├── main.py
├── module1.py
└── package1/
    ├── module2.py
    └── __init__.py

module1.py 中定义了一个函数 func1()module2.py 中也定义了一个函数 func2()。我们希望在 main.py 中使用这两个函数。我们可以使用如下的 import 语句:

import module1
from package1 import module2

# 调用 func1()
module1.func1()

# 调用 func2()
module2.func2()

上述代码中,module1module2 都是绝对路径导入。

示例 2:相对路径导入

如果我们希望在 module2.py 中使用 module1.py 中定义的函数,我们可以使用相对路径导入。例如:

# module2.py
from ..module1 import func1

def func2():
    func1()

上述代码中,我们使用双点相对导入来导入位于 module1.py 文件中的 func1() 函数。

结论

综上所述,Python 的 import 机制是 Python 中非常重要的一部分。它包括了不同种类的 import 语句,有多种不同的搜索路径,并执行了两个步骤:搜索模块和载入模块。在实际的 Python 开发过程中,我们应当清楚地了解这些内容并加以应用。

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

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

相关文章

  • Python使用shutil模块实现文件拷贝

    下面是“Python使用shutil模块实现文件拷贝”的完整攻略。 1. 概述 shutil 模块是 Python 标准库中一个高级文件操作模块,包含了一些常见的文件和目录操作函数,如拷贝、移动、删除文件或目录等功能,是 Python 操作文件和目录的重要工具之一。 2. 具体实现 shutil 模块提供了两个用于文件拷贝的函数:shutil.copy() …

    python 2023年6月3日
    00
  • Python是什么?有什么用途?

    Python是一种高级、解释性的计算机编程语言。它拥有简单易学、简洁优美、易读易写等诸多优点,深受程序员的喜爱。Python可以应用于多种领域,包括web开发、人工智能、科学计算、数据分析等。 Python的应用范围非常广泛,下面我来列举几个典型的应用场景: 1. Web开发 Python可以用来开发web应用。有很多web框架可以供开发者选择,如Djang…

    python 2023年4月19日
    00
  • 利用OpenCV和Python实现查找图片差异

    利用 OpenCV 和 Python 实现查找图片差异 简介 在实际工作中,我们经常需要对图片进行对比分析,例如查找两张图片之间的差异。 OpenCV 是一个功能强大,易于使用的图像处理工具包,可以在 Python 环境下使用。本文将讲解如何利用 OpenCV 和 Python 实现查找图片差异的完整攻略。 环境准备 在开始之前,请确保您有以下工具和包: P…

    python 2023年5月18日
    00
  • 解决pyttsx3无法封装的问题

    针对“解决pyttsx3无法封装的问题”的问题,一般分为以下几个步骤: 步骤一:确认问题 首先,我们需要确认问题:到底是什么原因导致无法封装? 在使用pyttsx3库时,有可能遇到以下问题: 报错:“com_error: (-2147352567, ‘Exception occurred.’, (comtypes.COMError(-2147352567, …

    python 2023年5月20日
    00
  • Python处理CSV文件真的很慢

    【问题标题】:Python processing CSV file really slowPython处理CSV文件真的很慢 【发布时间】:2023-04-06 04:13:02 【问题描述】: 所以我试图打开一个 CSV 文件,读取它的字段并在此基础上修复一些其他字段,然后将该数据保存回 csv。我的问题是 CSV 文件有 200 万行。加快速度的最佳方法…

    Python开发 2023年4月7日
    00
  • Python实现注册登录系统

    Python实现注册登录系统可以分为以下几个步骤: 步骤一:创建数据库 (示例一) 使用MySQL数据库作为数据存储介质。具体步骤如下: 安装MySQL数据库和相关的Python库。例如,可以使用mysql-connector-python库来连接MySQL数据库和Python。 创建一个数据库,例如,可以使用如下代码创建名为user_auth的数据库: C…

    python 2023年5月19日
    00
  • 查找NumPy数组中的最大和最小元素

    要查找NumPy数组中的最大和最小元素,可以使用NumPy库中的amax和amin函数,它们分别可以在数组中查找最大值和最小值。以下是完整的攻略: 创建NumPy数组 首先,我们需要创建一个NumPy数组,以便在它上面测试amax和amin方法。例如,我们可以创建一个10个元素的随机数组。 import numpy as np # 创建一个10个元素的随机数…

    python-answer 2023年3月25日
    00
  • Python+Tkinter实现简单的画图软件

    一、背景介绍 Python是一个功能强大的编程语言,同时其也有许多GUI框架可供选择。在这些框架中,Tkinter是使用最为广泛的一个。我们可以通过使用Tkinter来创建各种各样的GUI应用程序,包括具有绘图功能的软件。本文将向您介绍如何使用Python和Tkinter编写一个简单的绘图软件。 二、开始编写 在开始之前,我们需要安装Python和Tkint…

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