一个 Python 源码文件除了可以被直接运行外,还可以作为模块(也就是库)被导入。不管是导入还是直接运行,所有的东西都会被运行,特别是执行部分。而实际上在导入的时候,python的执行部分我们是不希望被运行的。下面是一个例子:
假设我们有一个文件,名字为recognition.py 代码如下:
P = 3.14
def main():
print "Pi is:", P
main()
Pi is: 3.14
这里py文件是没有上面的if name == ‘main’ ,那么当recognition.py被导入的时候,就会把main也一起执行,但有时候我们导入py文件,是不希望执行它的执行的。下面是个例子
我们创建一个 area.py
from recognition import P
def calc_round_area(radius):
return P * (radius ** 2)
def main():
print "round area: ", calc_round_area(2)
main()
Pi is: 3.14
round area: 12.56
所以导入recognition的文件时,连同它的执行部分也会执行。但其实我们是不希望这样子的,所以才会加上 if __ name__ == “__ main__”: 这个的意思只有文档直接被运行的时候,才会执行这个执行部分。如果只是被导入的时候,执行部分是不会被执行的。
P = 3.14
def main():
print "Pi is:", PI
if __name__ == "__main__":
main()
这时候运行area.py 部分的时候,导入recognition.py 却不会执行recognition.py的执行部分。
所以,总结的是 当python文件加上if __ name__ == "__ main__"的时候,被引用作为模块的时候,当如果模块是被直接运行的,则代码块被运行,如果模块是被导入的,则代码块不被运行。