Python 为什么要 if __name__ == “__main__“:

各位读者,你们知道以下两个Python文件有什么区别吗?

main1.py

def main():
	output = 'Hello'
	print(output)

if __name__ == "__main__":
	main()

main2.py

output = 'Hello'
print(output)

当我们直接运行 main1.py 与 main2.py 的时候,程序都会输出 Hello 字符。虽然他们两个的输出结果都一样,但其实还是存在一些微小的差距。

差别1:变量的scope

main1.py 的变量 output 是定义在 mian() 函数里的,因此变量 output 的 scope 也只局限在函数里而已。

反之,main2.py 的变量 output 是直接定义在全局里的,也就是说如果有import的其他Python文件也在全局里定义了一个叫做 output 的变量,那么 mian2.py 里的 output 就有可能覆盖了之前定义的 output 变量。

比较好的做法是尽量将变量的scope变得尽可能小,如无必要的话尽量不要用全局变量。

差别2:import时执行与否

main1.py 只有当其是第一个被执行的Python文件时,才会输出 Hello 字符。原因是它有一个 if 逻辑做判断。如果我们直接执行 main1.py ,那么 if name == “main”: 就会返回 True,然后接下来下面的代码才会接着被执行。

然而,除了当我们直接执行 main2.py 也会输出 Hello 字符之外,当其他文件 import main2.py 时也会输出 Hello 字符。当我们想要避免 import 文件时不小心执行了文件里的代码,则应该使用 if name == “main”: 。

额外好处:一目了然

使用 if name == “main”: 还有一个额外好处,就是当其他人在看你的代码时,当他们看见 if name == “main”: 时,他们就会知道代码作者的用意是希望用户直接执行这个文件,这个文件应该作为第一个被执行的文件。

David目前能想到的点就只有这些。如果有遗漏或是错误的地方,请大家指正与包涵。

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
青葱年少的头像青葱年少普通用户
上一篇 2023年3月5日 下午2:16
下一篇 2023年3月5日

相关推荐