在 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 模块既可以作为独立程序运行,又可以作为库被其他程序导入使用,极大地提高了代码的复用性。