在大多数编排得好一点的脚本或者程序里面都有这段 if __name__ == 'main': , 虽然一直知道他的作用, 但是一直比较模糊, 收集资料详细理解之后与大家分享.
1, 这段代码的功能
一个 python 的文件有两种使用的方法, 第一是直接作为脚本执行, 第二是 import 到其他的 python 脚本中被调用 (模块重用) 执行. 因此 if __name__ == 'main': 的作用就是控制这两种情况执行代码的过程, 在 if __name__ == 'main': 下的代码只有在第一种情况下 (即文件作为脚本直接执行) 才会被执行, 而 import 到其他脚本中是不会被执行的.
举个例子, 下面在 test.py 中写入如下代码:
|
并直接执行 test.py, 结果如下图, 可以成功 print 两行字符串. 即, if __name__=="__main__": 语句之前和之后的代码都被执行.
然后在同一文件夹新建名称为 import_test.py 的脚本, 只输入如代码:
import test
执行 import_test.py 脚本, 输出结果如下:
只输出了第一行字符串. 即, if __name__=="__main__": 之前的语句被执行, 之后的没有被执行.
2, 运行的原理
每个 python 模块 (python 文件, 也就是此处的 test.py 和 import_test.py) 都包含内置的变量__name__, 当运行模块被执行的时候,__name__等于文件名(包含了后缀. py); 如果 import 到其他模块中, 则__name__等于模块名称(不包含后缀. py). 而 "__main__" 等于当前执行文件的名称(包含了后缀. py). 进而当模块被直接执行时,__name__ == 'main'结果为真.
同样举例说明, 我们在 test.py 脚本的 if __name__=="__main__": 之前加入 print __name__, 即将__name__打印出来. 文件内容和结果如下,
可以看出, 此时变量__name__的值为 "__main__";
再执行 import_test.py, 模块内容和执行结果如下:
此时, test.py 中的__name__变量值为 test, 不满足__name__=="__main__" 的条件, 因此, 无法执行其后的代码.
来源: http://www.bubuko.com/infodetail-2944505.html