主顶层脚本环境
是什么
__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.
NoneD.
True优点
- 每个 Python 模块都有其定义的
__name__,如果它是__main__,则意味着该模块是用户独立运行的,我们可以执行相应的适当操作。 - 如果你将此脚本作为模块导入到另一个脚本中,name 将被设置为脚本/模块的名称。
- Python 文件可以充当可重用的模块,也可以充当独立程序。
if __name__ == "__main__":用于仅在文件被直接运行时执行某些代码,而不是在被导入时执行。
测验
登录后即可答题并追踪学习进度
使用
if __name__ == "__main__": 的主要目的是什么?A. 仅在文件被直接运行时执行代码,而不是在被导入时执行
B. 防止文件被导入
C. 使文件执行速度更快
D. 向其他模块隐藏代码