参考文章:https://blog.csdn.net/yjk13703623757/article/details/77918633/
对于if __name__ == ‘__main__’:的理解
对于很多编程语言来说,程序都必须要有一个入口,比如C,C++,以及完全面向对象的编程语言Java,C#等。C,C++都需要有一个main函数作为程序的入口,也就是程序的运行会从main函数开始。同样,Java,C#必须要有一个包含Main方法的主类,作为程序入口。
而Python则不同,它属于脚本语言,不像编译型语言那样先将程序编译成二进制再运行,而是动态的逐行解释运行。也就是从脚本第一行开始运行,没有统一的入口。
一个Python源码文件(.py)除了可以被直接运行外,还可以作为模块(也就是库),被其他.py文件导入。不管是直接运行还是被导入,.py文件的最顶层代码都会被运行(Python用缩进来区分代码层次),而当一个.py文件作为模块被导入时,我们可能不希望一部分代码被运行。
由于经常会在文件中调用其他的文件作为模块引入,所以这相当于是用于区分当前文件是作为调用其他文件、模块的文件,还是被其他文件所调用的文件。这个__name__是一个属性,是属于这个文件的属性,这个属性值会随着该文件的状态发生改变。这个状态指的是该文件是主文件还是被当作模块引入其他的文件中。所以当__name__值为‘__main__’时,表示当前文件是作为主文件的,那么使用if __name__ == ‘__main__’就会执行其中的语句。而如果当前文件是被其他文件所调用时,__name__的值是该文件名,所以此if语句块则不会被执行。
所以利用这个__name__属性,可以很好地实现,该文件本身能运行,也能被当作模块引入其他文件中,并且不发生冲突矛盾。
其实这也反映了OOP的思想,一切事物皆为对象。所以文件也是对象。作为对象必然具有相应的属性、方法...所以实际上if __name__ == ‘__main__’:这个程序入口就是再利用文件这个对象具有的属性来完成想要的功能。