主题
Python 中的 __name__ 与 __main__ 详解
更新: 9/24/2025字数: 0 字 时长: 0 分钟
平时我们经常会看到这样的 Python 代码:
python
if __name__ == "__main__":
main()在 Python 中,__name__ 和 __main__ 是两个与模块和脚本执行相关的特殊变量。 __name__ 和 __main__ 通常用于控制代码的执行方式,尤其是在模块既可以作为独立脚本运行,也可以被其他模块导入时
一、什么是 __name__?
__name__ 是 Python 中的一个内置变量,用于表示当前模块的名称。
- 当模块被直接运行时,
__name__的值为"__main__" - 当模块被导入到其他模块时,
__name__的值为模块本身的名称
二、基本用法
1. 直接运行模块时的行为
python
# module1.py
print(f"在 module1.py 中,__name__ 的值是: {__name__}")
if __name__ == "__main__":
print("module1.py 被直接运行")
else:
print("module1.py 被导入到其他模块")直接运行 module1.py 的输出:
在 module1.py 中,__name__ 的值是: __main__
module1.py 被直接运行如图:

2. 导入模块时的行为
python
# module2.py
import module1
print(f"在 module2.py 中,__name__ 的值是: {__name__}")运行 module2.py 的输出:
在 module1.py 中,__name__ 的值是: module1
module1.py 被导入到其他模块
在 module2.py 中,__name__ 的值是: __main__如图:

三、实际应用场景
1. 测试代码的隔离
python
# calculator.py
def add(a, b):
"""加法函数"""
return a + b
def subtract(a, b):
"""减法函数"""
return a - b
# 测试代码
if __name__ == "__main__":
# 这些代码只有在直接运行 calculator.py 时才会执行
print("测试计算器功能:")
print(f"5 + 3 = {add(5, 3)}")
print(f"10 - 4 = {subtract(10, 4)}")
else:
print("calculator.py 被导入到其他模块")现在将 calculator.py 导入到 module2.py 中运行输出为:
calculator.py 被导入到其他模块
在 module2.py 中,calculator.add(5, 3) 的结果是: 8
在 module2.py 中,calculator.subtract(10, 4) 的结果是: 6如图:

2. 模块的多功能使用
python
# data_processor.py
import json
def load_data(filename):
"""加载数据文件"""
with open(filename, 'r') as f:
return json.load(f)
def process_data(data):
"""处理数据"""
# 数据处理逻辑
return processed_data
def save_data(data, filename):
"""保存数据"""
with open(filename, 'w') as f:
json.dump(data, f, indent=2)
# 当作为脚本运行时,执行完整的数据处理流程
if __name__ == "__main__":
# 命令行参数处理
import sys
if len(sys.argv) != 3:
print("用法: python data_processor.py 输入文件 输出文件")
sys.exit(1)
input_file, output_file = sys.argv[1], sys.argv[2]
# 执行完整流程
data = load_data(input_file)
processed_data = process_data(data)
save_data(processed_data, output_file)
print("数据处理完成!")3. 包中的 __main__.py
在包目录中创建 __main__.py 文件,可以让包像脚本一样直接运行:
my_package/
__init__.py
__main__.py
module1.py
module2.pypython
# my_package/__main__.py
from . import module1, module2
def main():
print("运行我的包!")
module1.some_function()
module2.another_function()
if __name__ == "__main__":
main()然后可以这样运行:
bash
python -m my_package四、高级用法
1. 调试模式检测
python
if __name__ == "__main__":
# 开发调试模式
DEBUG = True
# 详细的日志输出
print("调试模式启用")
else:
# 生产模式
DEBUG = False2. 性能测试
python
import time
def expensive_operation():
"""一个耗时的操作"""
time.sleep(1)
return "完成"
if __name__ == "__main__":
# 只有直接运行时才进行性能测试
start_time = time.time()
result = expensive_operation()
end_time = time.time()
print(f"操作耗时: {end_time - start_time:.2f} 秒")