Python3中from...import...与import...的区别详解

七月
七月
发布时间:2026-10-15| 4人浏览过
原创

本文详细解析Python3中import与from...import两种导入方式的区别。通过tkinter模块示例,阐述import执行__init__.py文件及模块解释执行的本质,对比from...import直接提取模块内容的机制。分析两者在引用路径查找上的性能差异,并提供优化建议,帮助开发者理解导入原理并提升代码效率。

前言

以下说明以tkinter模块为例进行解析。

下图展示了安装后在Python解释器路径下lib(库)文件夹中tkinter文件夹内的具体内容。

1. import ...

语法示例:import tkinter

说明如下:

使用import引入的是包根目录下__init__.py文件的全部内容,包括其中定义的类、类的公有属性、类的公有方法以及其他代码。这种导入方式的本质是执行__init__.py文件。

对于模块而言,这种导入方式的本质是将模块文件解释执行一遍,并将结果赋值给模块名(即module_name = "module_name.py all code")。

执行流程为:import module_name 指向 module_name.py 文件,进而定位到 module_name.py 所在路径,最终在 sys.path(本质上是一个列表)中进行查找。

2. from ... import ...

语法示例:from ... import ...

说明如下:

from ... import ... 引入的是包根目录下的__init__.py以及指定文件的内容。需要注意的是,直接导入包通常没有实际意义,最终目的是导入包内的具体模块。这种导入包的方式较为少见。

当导入模块时,其本质是将module_name.py文件拆解,将其中需要的部分提取出来在当前文件中执行一遍。

3. 引用行为的差异

下方代码块展示的差异,主要受上述说明中所述机制的影响。

# test.py
# coding: utf-8
# author: admain_maxin
 
class Test(object):
    def add(self, num=1):
        print(num+1)
# test1.py
# coding: utf-8
# author: admain_maxin
import test
 
test.Test().add()
 
from test import Test
 
Test().add()

4. 引用优化

例如,当我们需要引用某个模块module_name.py中的test()函数时,如果采用import test方式,系统首先需要在sys.path列表所列出的目录下查找模块module_name.py。若多个函数均执行此操作,会耗费大量时间(问题在于重复查找module_name.py模块)。此时可直接将模块中的函数导入,以优化性能。

from module_name import test
 
# def test():
#     print("this is module_name.py test")
 
def test1():
    test()
 
def test2():
    test()
 
def test3():
    test()

总结

到此这篇关于Python3中from...import...与import ...之间区别详解的文章就介绍到这了,更多相关Python3 _from...import...与import ...区别内容请搜索本站以前的文章或继续浏览下面的相关文章,希望大家以后多多支持本站!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。