if __name__ == "__main__":用于控制代码仅在模块被直接运行时执行,避免导入时触发副作用;它区分运行方式、防止意外执行、支持测试调试与命令行入口,实现模块复用与脚本功能统一。

Python中if __name__ == "__main__":的作用,是控制模块代码是否在被直接运行时才执行,避免在被其他模块导入时意外触发主逻辑。
区分“导入”和“直接运行”
每个Python模块都有一个内置变量__name__,它的值取决于模块如何被使用:
- 当模块被直接执行(如
python script.py),__name__的值为"__main__"; - 当模块被导入(如
import script),__name__的值为模块名(如"script")。
这个机制让开发者能明确指定哪些代码只在脚本独立运行时生效,比如测试、演示或命令行入口。
防止导入时执行副作用
如果没有if __name__ == "__main__":保护,模块顶层的语句(如函数调用、print、文件读写)会在每次导入时运行,可能引发意外行为:
立即学习“Python免费学习笔记(深入)”;
- 重复打印调试信息;
- 提前加载耗时资源;
- 修改全局状态,影响其他模块逻辑。
加上判断后,这些操作仅保留在“可执行脚本”场景下生效,提升模块复用性和健壮性。
作为模块的测试/调试入口
常把测试代码、示例调用或简单命令行逻辑放在if __name__ == "__main__":块内:
def main():
print("程序启动")
# 实际业务逻辑
<p>if <strong>name</strong> == "<strong>main</strong>":
main() # 仅运行脚本时调用
这样既不影响他人导入使用该模块中的函数,又保留了快速验证功能的能力,是开发调试的常用习惯。
支持多种运行方式的统一入口
现代Python项目中,它也常与argparse、click等工具配合,构建命令行接口:
- 模块可被当作库导入使用其函数;
- 也可直接运行,接收命令行参数完成特定任务。
这种设计让一个文件同时具备“库”和“脚本”双重身份,符合Python“显式优于隐式”的哲学。










