ESSAY / NOTE

彻底理解python中的 if __name__ == '__main__':

前言 一个python的文件有两种使用的方法,第一是直接作为脚本执行,第二是import到其他的python脚本中被调用(模块重用)执行。if__ name__== ‘__ main__’:的作用就是控制这两种情况执行代码的过程。在if __ name__ ==’__ main__’:下的代码只有在第一种情况下(即文件作为脚本直接执行)才会被执行,而import到其他脚本中是不会被执行的。 程序入口 对于很多编程语言来说,程序都必须要有一个入口,比如C、C++、等。如果你接触过这些语言,对于程序入口这个概念应该很好理解。C、C++都需要有一个main函数作为程序的入口,也就是程序的运行会从main函数开始。 而Python则不同,它属于脚本语言,不像编译型语言那样先将程序编译成二进制再运行,而是动态的逐行解释运行。也就是从脚本第一行开始运行,没有统一的入口。在python中,一个Python源码文件(.py)除了可以被直接运行外,还可以作为模块(也就是库),被其他.py文件导入。 直接作为脚本执行 如果判断出__name__的值是 __ main __,就说明这里是程序入口,而非被别的 py 文件 import。例如: print("I am A!") if __name__ == '__main__': print("I am B!") 这里的运行结果是: 程序从上到下按顺序运行。 那么这个 __ name __ 是来干嘛的,把 if __ name __ == ‘__ main __’ 去掉。不也能照样运行? print("I am A!") #if __name__ == '__main__': print("I am B!") 输出结果: 问题是对的,可以运行。 如上,我们可以看到if __name __ == ’ __ main __'相当于Python模拟的程序入口,Python本身并没有这么规定,这只是一种编码习惯。由于模块之间相互引用,不同模块可能有这样的定义,而程序入口只有一个。到底哪个程序入口被选中,这取决于name的值。 print("I am A!") #if __name__ == '__main__': print("I am B!") print("__name__的值:",__name__) 输出结果: __ name __ 是模块内置的一个属性, 一般如果模块是被引用的时候, 它的值是模块名, 如果这个python文件被直接运行, 那么它的值是’__ main __’ 模块重用执行 不管是直接运行还是被导入,.py文件的最顶层代码都会被运行(Python用缩进来区分代码层次),而当一个.py文件作为模块被导入时,我们可能不希望一部分代码被运行。 例子举例: test1.py print("I am A!") if __name__ == '__main__': print("I am B!") 输出: 如果test1.py作为test2.py的模块被导入,则test1.py的if __ name __ == ‘__ main __’: 之后的代码不会被执行。 test2.py #test2.py import test1 if __name__ == '__main__': print("I am C!") 输出结果: 总结 当你的 .py 作为模块给别人使用,提供一些便利。为了不让别人一导入你的模块就直接运行整个脚本。那么使用 if __ name __ == ‘__ main __’ 其中的代码就不会在被 import 时被执行。 欢迎留言补充。 参考:https://stackoverflow.com/questions/419163/what-does-if-name-main-do ———————————————— 版权声明:本文为CSDN博主「程序猿编码」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/chen1415886044/article/details/104855539