主顶层脚本环境

是什么

__main__ 是顶层代码执行所在作用域的名称。 当一个模块从标准输入、脚本或交互式提示中读取时,其 name 被设置为等于 __main__

模块可以通过检查自身的 __name__ 来发现它是否在主作用域中运行,这允许使用一种常见的惯用法来有条件地执行模块中的代码。当它作为脚本运行或使用 python -m 运行时执行,但导入时不会:

# __name__ == "__main__": 检查脚本是否被直接运行(未被导入)
if __name__ == "__main__":  # 脚本运行时为 True,导入时为 False
    # 仅在作为脚本运行时执行
    main()

对于包而言,通过包含一个 main.py 模块可以实现相同效果,当使用 -m 运行该模块时,其内容将被执行。

例如,我们正在开发一个设计为用作模块的脚本,我们应该这样做:

# 示例:函数可以被导入,但测试代码仅在直接执行时运行
def add(a, b):
    return a+b

if __name__ == "__main__":  # 仅在文件被执行时运行,而不是被导入时运行
    add(3, 5)
测验

登录后即可答题并追踪学习进度

当一个 Python 文件作为脚本直接运行时,__name__ 的值是多少?
A. 文件名
B. "**main**"
C. None
D. True

优点

  1. 每个 Python 模块都有其定义的 __name__,如果它是 __main__,则意味着该模块是用户独立运行的,我们可以执行相应的适当操作。
  2. 如果你将此脚本作为模块导入到另一个脚本中,name 将被设置为脚本/模块的名称。
  3. Python 文件可以充当可重用的模块,也可以充当独立程序。
  4. if __name__ == "__main__": 用于仅在文件被直接运行时执行某些代码,而不是在被导入时执行。
测验

登录后即可答题并追踪学习进度

使用 if __name__ == "__main__": 的主要目的是什么?
A. 仅在文件被直接运行时执行代码,而不是在被导入时执行
B. 防止文件被导入
C. 使文件执行速度更快
D. 向其他模块隐藏代码

相关链接