Python中if __name__ == '__main__'的作用与原理详解


一、核心作用:控制代码执行逻辑

Python文件通常有两种用途:

  1. 作为主脚本直接运行
  2. 作为模块被其他文件导入

if __name__ == '__main__' 用于区分这两种场景,确保模块中的代码仅在直接运行时执行,避免被导入时触发不必要的操作。

二、典型应用场景

三、运行原理深度解析

每个Python模块都包含内置属性__name__

# test.py
print(f"模块名称: {__name__}")  # 验证__name__值的变化

def main():
    print("这是主函数")

if __name__ == '__main__':
    print("直接执行时才会看到这条信息")
    main()

场景1:直接运行test.py

$ python test.py
模块名称: __main__
直接执行时才会看到这条信息
这是主函数

场景2:在import_test.py中导入

# import_test.py
import test  # 导入时只会执行模块级代码
$ python import_test.py
模块名称: test

四、最佳实践示例

标准工程化写法

# 计算模块 math_util.py
def factorial(n):
    return 1 if n == 0 else n * factorial(n-1)

def test():
    print("单元测试:")
    print(factorial(5))  # 120

if __name__ == '__main__':
    test()  # 直接运行时执行测试

导入使用(保持代码清洁)

# main_app.py
from math_util import factorial

print(factorial(10))  # 3628800

五、常见误区说明

  1. 文件名影响:假设__name__包含文件路径(实际只与导入名称相关)
  2. 错误比较:写成__name__ == "test.py"(正确应为__name__ == "__main__"
  3. 过度使用:将全部代码放在main块中(应只包含执行入口)

六、扩展应用:命令行参数处理

if __name__ == '__main__':
    import sys
    if len(sys.argv) > 1:
        print(f"输入参数: {sys.argv[1:]}")
    else:
        print("请提供运行参数")