关于python编程中经常看到的如下写法:
if __name__ =="__main__":
为什么这样写?与__main__作用有关。
__main__代表最高层级代码环境。什么叫做最高层级代码环境?就是程序的入口程序。
当一个python模块或者包是被引入的时候,__name__的值就是他的名字,即去掉.py后缀的部分。
例子:
import sys
print(sys.__name__)
结果:
如果这个文件是包的一部分,那么__name__将包含父包的路径。
例子:
from concurrent.futures import process
print(process.__name__)
结果:
如果是在当前的python文件内,则__name__是__main__
例子:
def hello():
print('hello world!')
print(__name__)
if __name__ == "__main__":
hello()
结果:
常用法及特点
因为卸载 if __name__ == “main”中的代码不会在该文件被别的文件引用时执行,所以可以将一些测试的代码,或其他用处的代码写在这里面。
如果不写在这里面,而是直接写在文件中,那么这部分代码将被自动执行。
例子:test2.py
def hello():
print('hello world!')
print(__name__)
def hello2():
print('hello world2!')
print(__name__)
if __name__ == "__main__":
hello()
hello2()
结果:直接运行test2.py时候,hello和hello2都将被执行。
但是:
在test3.py中引入test2.py时,运行test3.py时候,只有hello2被自动执行了,包含在if __name__ == "__main__":判断语句中的hello方法并没有执行。
import test2
print('这是test3.py,他引入了test2.py文件,')
结果:
因为当python程序a.py被别的python程序b.py引入时,实际上该python程序是自动从上至下执行的,因为这个时候__name__的值时b,而非__main__,所以其中代码不会被执行。不过这其中的代码,在正式投产时是不应该被保存的。
还一点主意,在if __name__ == "__main__":中定义的变量对于整个模块来讲是全局变量,因此,尽量将变量和函数逻辑进行封装,而不是在此进行定义或者处理,