Python模块定义、导入机制与__name__用法详解

Alice
Alice
发布时间:2026-10-13 | 3人浏览过
原创

本文深入解析Python模块的定义与导入方式,涵盖import与from...import语法、同级及跨目录导入技巧,并详细阐述__name__变量在区分直接运行与模块导入时的核心作用,帮助开发者掌握Python模块化管理的核心概念。

本文通过具体实例,详细解析Python中模块的定义、导入方法以及__name__变量的使用场景,旨在为读者提供实用的参考与指导。

  • 模块的基本概念
  • 模块导入机制
    • 模块导入方式
    • 模块自导入逻辑
      • 同级目录下的导入
      • 跨级目录导入策略
        • 从内部目录导入外部模块
        • 从外部目录导入内部模块
  • __name__变量的应用

在Python中,模块可视为存放方法与类的容器。若需使用特定模块中的方法或类,必须首先导入该模块。

需要注意的是,Python内置了丰富的方法与类,部分功能无需额外导入模块即可直接使用。

模块的标准调用格式为:模块名.函数 或 模块名.类。


#函数
import math
print(math.sqrt(3))
#类
import threading
a=threading.Thread()
print(a)

 

  • 常用的模块导入语法包括:

    • 使用 import 模块名 语句导入整个模块。
    
    #import 模块名
    import math
    print(math.sqrt(9))
    • 使用 from...import 语句可从模块中导入指定的部分(如类或方法)。其中,from...import * 表示导入模块内的所有内容。

#from 模块名 import 类名、方法名
from collections import Iterable 
print(isinstance("abc",Iterable))
print(isinstance([1,2,3],Iterable))
  • 在 from...import 导入时,还可以为导入的部分指定别名,例如:from ... import funcA as fa。
  • 模块的自导入机制

Python解释器在查找模块时,遵循以下搜索路径:

首先在当前目录下进行搜索。

其次在环境变量 PYTHONPATH 指定的路径列表中依次查找(可通过 sys.path 查看)。


import sys
print(sys.path)

----------
运行结果:
['J:\\HardWork\\Code\\python', 
'J:\\HardWork\\Code\\python',
 'I:\\python3\\python36.zip',
 'I:\\python3\\DLLs', 
'I:\\python3\\lib',
 'I:\\python3', 
'I:\\python3\\lib\\site-packages']

最后在 Python 安装路径的 lib 库中进行搜索。

  • 对于同级目录下的模块,可直接进行导入操作。

 

  • 对于不同级目录的模块,需先将对应目录路径添加到 sys.path 中,然后再执行 import 操作。

    • 目录内的模块b导入目录外的模块c

具体的目录结构如下:

模块c中的内容示例:

在目录b中导入模块c的方法如下:


import sys,os
print(__file__)##这是当前文件的绝对路径
parent_dir=os.path.dirname(__file__)##获得当前文件的目录
pp_dir=os.path.dirname(parent_dir)
sys.path.append(pp_dir)
# print(sys.path)
import c  #要导入c,必须将diff_dir加入sys.path中
    • 另一种情况:目录外的模块c导入目录内的模块d

此时的目录结构为:

模块d中的内容示例:

在模块c中导入模块d的代码实现:


from d2 import d

或者采用以下写法:


import d2.d

最终运行结果:


由于Python模块既支持被导入,也支持直接运行,为了区分代码是直接执行还是被导入后执行,引入了 __name__ 变量。

 

当脚本被直接运行时,__name__ 的值固定为 __main__。


print("import C done")
print(__name__)

if __name__=='__main__':
 print("direct run")

---------------
运行结果:
import C done
__main__
direct run

当模块被其他脚本导入时,__name__ 的值等于当前模块的名称。由于此时 __name__ 不等于 __main__,因此不会执行 中的代码块。


import sys,os

# print(__file__)##这是当前文件的绝对路径
parent_dir=os.path.dirname(__file__)##获得当前文件的目录
pp_dir=os.path.dirname(parent_dir)
sys.path.append(pp_dir)
# print(sys.path)
import c  #要导入c,必须将diff_dir加入sys.path中




------------------
运行结果:
import C done
c

若对Python其他技巧感兴趣,建议查阅本站专题:《Python文件与目录操作技巧汇总》、《Python文本文件操作技巧汇总》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》及《Python入门与进阶经典教程》。

希望本文的阐述能对您的Python程序设计工作有所帮助。

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表