在 Python 中,if __name__ == '__main__':
是一个常见的代码模式,用于控制模块的执行行为。它的核心作用是区分模块是被直接运行还是被导入到其他文件中。
作用详解:
-
当文件被直接运行时
__name__
会被自动设置为'__main__'
,此时if
块内的代码会执行。 -
当文件被导入时
__name__
会变成模块的名称(即文件名),此时if
块内的代码不会执行。
实际用途:
1. 防止导入时执行测试代码
# mymodule.py
def useful_function():
print("This is useful!")
# 测试代码(只在直接运行时执行)
if __name__ == '__main__':
print("Running tests...")
useful_function()
-
直接运行
python mymodule.py
→ 输出测试结果 -
其他文件导入
import mymodule
→ 不会触发测试代码
2. 创建可复用模块
# utils.py
def helper():
print("Helper function")
if __name__ == '__main__':
# 直接运行时提供命令行操作
print("Running in CLI mode")
helper()
-
作为模块导入时:只提供
helper()
函数 -
直接运行时:变成命令行工具
3. 分离代码逻辑
# main.py
import data_processor
data = load_data()
processed = data_processor.process(data) # 导入时不触发执行
if __name__ == '__main__':
save_results(processed) # 只有直接运行时保存结果
技术原理:
-
Python 解释器在运行文件时,会创建一个特殊变量
__name__
-
直接运行时:
__name__ = "__main__"
-
被导入时:
__name__ = "模块名"
(如"mymodule"
)
最佳实践:
✅ 将脚本的入口代码放在 if __name__ == '__main__':
下
✅ 模块的核心功能定义在外部函数中
❌ 避免在模块顶层写直接执行的代码(除非明确需要)
📌 关键总结:这个结构让 Python 文件既能作为独立程序运行,又能作为模块被安全导入,是 Python 模块化编程的基础设计模式。