在python代码当中,如果书写规范,我们通常会写上一句
if __name__ == "__main__":
不过貌似这也并不是必须的,毕竟如果你直接单刀直入开门见山得书写脚本似乎也是正常运行畅通无阻,那么,这句代码到底有什么作用呢?
道:
python是一门解释型语言,所以当代码被执行的时候,不需要事先编译成中间代码,当模块被调用的时候是从模块顶的第一行开始逐行执行。
所以不同于C、C++、Java需要一个主程序的入口main函数,python并不需要一个main()作为主程序入口。
在搞清楚这句代码的意义之前,我们先要搞明白 __name__这个python的内置变量。
__name__这个内置变量是每一个python的模块必备的属性变量,但是它的值取决于这个模块是怎么被执行的。
当直接执行一个python代码的时候,这个模块的__name__的值就是"__main__",当这个模块被其他代码调用时,模块的__name__的值就是这个脚本模块文件自己的文件名(注意,不含有后缀名".py"哦)。
总结一下:
如果我们是直接执行某个.py文件的时候,该文件中那么”__name__ == '__main__'“是True,但是我们如果从另外一个.py文件通过import导入该文件的时候,这时__name__的值就是我们这个.py文件的名字而不是"__main__"。
这个功能还有一个用处:调试代码的时候,在”if __name__ == '__main__'“中加入一些我们的调试代码,我们可以让外部模块调用的时候不执行我们的调试代码,但是如果我们想排查问题的时候,直接执行该模块文件,调试代码能够正常运行!
术:
我们来看几个例子,先创建一个python文件,filename.py:
#! /usr/bin/env python
# -*- coding:UTF-8 -*-
def MyFunction():
print("本模块的__name__值为:", __name__)
if __name__ == "__main__":
MyFunction()
当我们直接在终端执行该文件时,结果为:
本模块的__name__值为: __main__
我们在创建一个调用它的python文件:
#! /usr/bin/env python
# -*- coding:UTF-8 -*-
from filename import *
MyFunction()
当我们直接在终端执行该文件时,结果为:
本模块的__name__值为: filename
相信这样一个例子我们就能很清楚的知道python中if __name__ == "__main__"的作用了。