对Python中if __name__ == '__main__'的理解

今日工作的时候杰哥和我提醒了我写的代码问题,很多时候没有考虑到很多的资源调用和程序编排的考虑,给我提出了多使用

提交的python文件,如果只是自己文件内执行用到,加上
f name == ‘main‘:

我一开始的时候,觉得只是为了节省资源的使用问题。后来在杰哥的解释下明白了一些问题。

为了不重复执行,例如a.py
面执行了代码片段,b.py import了a.py,a.py的代码就会被执行到。
果a.py的代码放在if name == ‘main‘:里面,就只有当你单独执行a.py的时候会执行到。b.py import的时候不会执行

1、这段代码的功能

一个python的文件有两种使用的方法,第一是直接作为脚本执行,第二是import到其他的python脚本中被调用(模块重用)执行。因此

1
2
3
if __name__ == 'main': 的作用就是控制这两种情况执行代码的过程,  
在if __name__ == 'main': 下的代码只有在第一种情况下(即文件作为脚本直接执行)才会被执行,
而import到其他脚本中是不会被执行的。

例如我们在test.py中书写一下代码:

1
2
3
print "I'm the first."
if __name__=="__main__":
print "I'm the second."

然后在同一文件夹新建名称为import_test.py的脚本,只输入如代码:

1
import test

执行import_test.py脚本,输出结果如下:

1
I'm the second.

只输出了第一行字符串。即,

1
if __name__=="__main__": 之前的语句被执行,之后的没有被执行。

2、运行的原理

1
2
3
4
5
每个python模块(python文件,也就是此处的test.py和import_test.py)都包含内置的变量__name__,
当运行模块被执行的时候,__name__等于文件名(包含了后缀.py)
如果import到其他模块中,则__name__等于模块名称(不包含后缀.py)。
而“__main__”等于当前执行文件的名称(包含了后缀.py)。
进而当模块被直接执行时,__name__ == 'main'结果为真。

参考博客:http://www.dengfeilong.com/post/60.html