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