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

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

本文详细解析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 相关产品和应用

全部下载

专题列表