在 Python 中,__name__
是一个内置变量,用于标识当前模块的名称。它的主要作用是区分模块是作为主程序运行还是被其他模块导入,这在代码复用和模块化设计中非常有用。
1. __name__
的基本行为
- 当一个 Python 文件被直接运行时,该文件中的
__name__
变量会被自动赋值为"__main__"
- 当一个 Python 文件被其他模块导入时,该文件中的
__name__
变量会被赋值为模块的文件名(不包含.py
扩展名)
2. 常见用法示例
示例 1:直接运行模块
创建一个文件 example.py
:
print(f"当前模块的 __name__ 是: {__name__}") if __name__ == "__main__": print("这个代码块只有在直接运行该模块时才会执行")
直接运行该文件:
python example.py
输出结果:
当前模块的 __name__ 是: __main__ 这个代码块只有在直接运行该模块时才会执行
示例 2:导入模块使用
创建另一个文件 import_example.py
,导入上面的 example.py
:
import example # 导入模块 print(f"在 import_example 中,example 模块的 __name__ 是: {example.__name__}")
运行 import_example.py
:
python import_example.py
输出结果:
当前模块的 __name__ 是: example 在 import_example 中,example 模块的 __name__ 是: example
可以看到,当 example.py
被导入时,其 __name__
变为了模块名 "example",且 if __name__ == "__main__":
中的代码块没有执行。
3. 主要应用场景
(1) 模块的自我测试
可以在 if __name__ == "__main__":
代码块中编写测试代码,这样当模块被直接运行时会执行测试,而被导入时不会执行:
def add(a, b): return a + b # 测试代码 if __name__ == "__main__": print("测试 add 函数:") print(add(2, 3)) # 输出 5 print(add(5, 7)) # 输出 12
(2) 避免模块导入时执行不必要的代码
当一个模块包含大量执行代码(而非仅定义函数和类)时,可以用 __name__
控制只在直接运行时执行这些代码:
# 定义函数(无论导入还是直接运行都会执行) def useful_function(): pass # 只有直接运行时才执行的代码 if __name__ == "__main__": # 执行一些需要用户交互或初始化的操作 print("程序开始运行...") useful_function()
4. 总结
__name__
是 Python 模块的内置属性,用于标识模块名称- 直接运行模块时,
__name__
="__main__"
- 模块被导入时,
__name__
= 模块文件名(不带扩展名) - 主要用途:区分模块运行方式、实现模块自测试、控制代码执行条件
这个机制让 Python 模块既可以作为独立程序运行,又可以作为库被其他程序导入使用,极大地提高了代码的复用性。