最标准方法是检查 name == "__main__",因为直接运行时该变量值为"__main__",导入时为模块名;常用于保护入口代码,需用==而非is,且须置于顶层。

Python 中判断当前文件是否被作为主模块运行,最常用、最标准的方法是检查内置变量 __name__ 的值是否等于字符串 "__main__"。
为什么用 __name__ == "__main__"
每个 Python 模块都有一个内置属性 __name__。当该模块被直接执行(例如通过 python script.py)时,Python 会将其设为 "__main__";而当它被其他模块通过 import 导入时,__name__ 就是模块的文件名(不含 .py),比如 "utils" 或 "my_package.module"。
典型写法:保护入口代码
这种判断常用于包裹测试代码、命令行逻辑或调试内容,确保它们只在直接运行脚本时执行,而不会在被导入时意外触发:
def main():
print("程序开始运行")
if __name__ == "__main__":
main()
常见误判场景与注意事项
-
不要写成
__name__ is "__main__":字符串比较必须用==,因为is比较的是对象身份,不可靠。 - 注意缩进和位置:该判断应放在模块顶层(不缩进),且通常靠近文件末尾,避免被前面的语法错误阻断。
-
IDE 运行方式可能影响结果:某些 IDE(如 PyCharm)默认以
-m方式运行,或启用工作目录/环境配置,但只要不是显式import,__name__仍为"__main__"。 -
包内
__main__.py:若想让整个包支持python -m mypackage,需在包目录下添加__main__.py,其内部同样用if __name__ == "__main__":控制逻辑。










