在抖音看到的这个问题
忽然看到的,正好无聊,发表下我的理解
理解Python中的 if __name__ == ‘__main__’
我感觉对初学者来说,理解 if __name__ == '__main__':
的概念确实可能会有些挑战,但这是学习Python中的一个重要和常见的概念,算是必经之路。
- 涉及模块和脚本的区别: 这个概念要求初学者理解Python中模块(module)和脚本(script)的区别,以及它们是如何交互的。
- 抽象性:
__name__
和'__main__'
是抽象的概念,它们并不像变量和函数那样直观。理解它们需要一定的抽象思维能力。 - 并且用法是特定于Python的,原因在于它涉及到Python对模块和脚本执行方式的特殊处理。
什么是 if __name__ == ‘__main__’?
在Python中,每个Python文件都被视为一个模块。当模块被直接运行时,其 __name__
属性被设置为 ’__main__
’,当模块被导入到另一个模块时,__name__
则被设置为模块的名称。
if __name__ == ‘__main__’是一种利用这一特性来区分模块是被直接运行还是被导入的方法。这种方法允许我们定义两种行为:一种是当模块作为独立脚本运行时的行为,另一种是当模块被其他模块导入时的行为。
为什么这一概念重要?
- 代码重用: 使用这种方法,可以编写既可以作为独立程序运行,也可以作为模块被其他程序导入的代码。
- 防止代码被意外执行: 当模块被导入到另一个模块时,可能不希望某些代码立即执行。if __name__ == ‘__main__’
:
提供了一种方式来阻止这种情况。
使用 if __name__ == ‘__main__’的验证
创建一个脚本(main_script.py)
当直接运行 main_script.py
时,因为 __name__
设置为 ‘__main__
‘,所以 main()
函数会被执行
print Hello World!
导入这个脚本(importing_script.py)
当 importing_script.py
执行时,main_script.py
被导入,但 main()
函数不会执行,因为 __name__
不是
‘__main__’
使用main_script.main() 调用了 main_script 模块中定义的 main 函数
查看回显存在Hello World!
不使用 if __name__ == ‘__main__’的验证
此版本的 main_script.py
包含在函数外部的一个输出
当运行 importing_script.py
时,由于 main_script.py
被导入,其顶层代码(包括在 main()
函数外部的打印语句)将被立即执行print输出 函数外和Hello World,之后main_script.main()
的调用将再次执行 main()
函数,所以存在两个Hello World!