为什么要if __name__ ==‘__main__‘

2021.2.20

在以前看别人的代码的时候,看到有些人写到if __name__=='__main__',但是自己并没有写还是能够正常运行啊,我自己注意好缩进不就好了,于是并没有很注意,直到有一次在写pygame界面的时候,由于使用了subprocess模块,开了另一个进程,结果出现了奇怪的一幕:

在这里插入图片描述

出现了两个界面!!上面的截图显示pygame模块被导入了两次,并且有另外一个一模一样的界面出现了,这就很匪夷所思。

经过思考,最终知道了问题所在:首先,操作系统在开进程的时候,是将父进程的代码和内存区复制一遍,之后再导入子进程的代码的。而 Python属于脚本语言,不像编译型语言那样先将程序编译成二进制再运行,是动态的逐行解释运行。也就是从脚本第一行开始运行,没有统一的入口。所以再导入另一个.py文件作为模块的时候,会将最顶层代码执行一遍的,而我们开子进程的这个操作,就相当于又导入了一遍自己,因此在哪怕没有import别的.py文件的时候,单独启动子进程,还是会出现原代码被重复执行了一次的情况。

if __name__=='__main__',实际上就是在模拟编译型语言,给你个伪程序入口,这样就能够区分咱们的主程序和导入的模块和子进程中的代码区别啦,就不会重复执行了。

参考
(对于子进程和程序入口的知识,还可以再深挖,有点没弄懂本质)

猜你喜欢

转载自blog.csdn.net/QinZheng7575/article/details/113897715
今日推荐