The simplest explanation for the __name__
variable (imho) is the following:
Create the following files.
# a.py
import b
# b.py
print "Hello World from %s!" % __name__
if __name__ == '__main__':
print "Hello World again from %s!" % __name__
Running them will get you this output:
$ python a.py
Hello World from b!
As you can see, when a module is imported, Python sets globals()['__name__'
] in this module to the module's name.
$ python b.py
Hello World from __main__!
Hello World again from __main__!
As you can see, when a file is executed, Python sets globals()['__name__'
] in this file to __main__
.
之所以要有__name__ == '__main__'
这个语句是因为:
有时候我们需要 直接运行 一个模块,有时候我们需要 引入 一个模块而不是直接运行。加入这条语句,可以区别这个模板被直接运行和被引入两种下情况 不同 的 执行效果 。
first_module.py
print ("First Module's Name: {}".format(__name__))
输出结果:
First Module's Name: main
second_module.py
import first_module
print ("Second Module's Name: {}".format(__name__))
输出结果:
First Module's Name: first_module
Second Module's Name: main
如果 first_module.py
def main():
print ("First Module's Name: {}".format(__name__))
if __name__ == '__main__':
main()
输出结果:
First Module's Name: main
这时如果 second_module.py
import first_module
print ("Second Module's Name: {}".format(__name__))
输出结果:
Second Module's Name: main