在Python程序中,你会经常看到 __name__,例如:
if __name__ == '__main__':
main()本文将介绍如何正确使用和理解这个变量。
请注意,__name__ 在程序中是一个变量,只不过这个变量的命名有点奇怪,用双下划线开头和结尾。这种命名的方法,在Pyhton的类对象设计中,常常用于一些具有特殊作用的属性或者方法名称。
如果将编写的一个Python文件,即 .py 为扩展名的文件,作为模块被其他程序引入的时候,我们需要通过 __name__ 这个变量,决定在引入的时候是否要运行该文件。
例如创建一个文件 namescript.py,内容如下:
def my_function():
print('the value of __name__ is ' + __name__)
def main():
my_function()
if __name__ == "__main__":
main()如果执行 namescript.py 文件,其执行流程如下:

在importscript.py中,变量__name__被赋值为__main__,然后执行import namescript,Python解析器会自动在模块名字后面增加.py并在检索目录中查找该文件——所以,在引入模块的时候不要写成import namescript.py。找到了,就引入该文件中的所有代码。
然后,将namescript.py文件所运行的空间中的__name__设置为namescript。结合上图,在importingscript.py和namescript.py中,分别有两个同名的__name__变量,但是,它们的值不同。如此,在namescript.py中,因为__name__的值是namescript了,于是该文件中的if __name__ == "__main__"条件不再成立,所以此条件下的main()函数不再执行。
在importingscript.py中,调用了namescript.my_function(),打印的结果是:the value of __name__ is namescript,这里的__name__当然是namescript.py中的变量。
如果在importingscript.py中,增加print(__name__),打印出来的结果应该是__main__。
本文内容作为《Python大学实用教程》第7章的补充和拓展,帮助你理解__name__变量的作用及其在模块编写中的应用效果。
参考文献:
[1]. What’s in a (Python’s) __name__?
[2]. Python大学实用教程. 齐伟. 北京:电子工业出版社. 2019.3,第1版
欢迎在我的网站阅读更多内容。