简单地说,
__name__
是为每个脚本定义的变量,用于定义脚本是作为主模块运行还是作为导入模块运行。
如果我们有两个剧本;
#script1.py
print "Script 1's name: {}".format(__name__)
和
#script2.py
import script1
print "Script 2's name: {}".format(__name__)
执行script1的输出是
Script 1's name: __main__
执行script2的输出是:
Script1's name is script1
Script 2's name: __main__
如你所见,
__姓名__
告诉我们哪个代码是“主”模块。
这很好,因为您可以编写代码,而不必担心C/C++中的结构问题,如果文件没有实现“主”函数,那么它就不能编译成可执行文件,如果是,它就不能用作库。
假设您编写了一个Python脚本,它做了一些很好的事情,并且实现了大量的函数,这些函数对于其他目的很有用如果我想使用它们,我可以直接导入脚本并在不执行程序的情况下使用它们(假设您的代码只在
if __name__ == "__main__":
上下文)。而在C/C++中,你必须将这些部分分割成一个单独的模块,然后包含该文件。想象一下下面的情况;
箭头是导入链接对于每个试图包含前面模块代码的三个模块,有六个文件(九个,包括实现文件)和五个链接。这使得很难将其他代码包含到C项目中,除非它是作为库专门编译的。现在为Python设想一下:
你编写一个模块,如果有人想使用你的代码,他们只需要导入它,然后
__姓名__
变量可以帮助分离程序的可执行部分和库部分。