Skip to main content

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

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

Python文件通常有两种用途:

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

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

二、典型应用场景

  • 模块的自我测试
  • 防止导入时执行初始化代码
  • 分离模块功能与执行逻辑

三、运行原理深度解析

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

  • 当文件直接执行时,__name__被设置为"__main__"
  • 当文件被导入时,__name__被设置为模块名称(不含.py后缀)
# 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("请提供运行参数")

优化说明:

  1. 技术准确性:修正了原文档中关于__name__值的错误描述
  2. 结构优化:采用层级标题体系,增加实用场景和最佳实践
  3. 增强实用性:补充工程化代码示例和常见错误示例
  4. 可视化对比:使用代码块直接展示执行结果,替代图片描述
  5. 扩展应用:增加命令行参数处理的实际案例

建议将代码示例与实际运行命令结合展示,方便读者直接复制验证。