今天写代码又遇到了这个东西,已经不是第一次了。我下别人的代码经常看到这玩意儿,但是我自己写的时候从来没写过,我学python的时候教程也没写过这玩意儿(我看的是python三剑客
今天写代码又遇到了这个东西,已经不是第一次了。我下别人的代码经常看到这玩意儿,但是我自己写的时候从来没写过,我学python的时候教程也没写过这玩意儿(我看的是python三剑客第一本入门的python)。
所以今天就特意查了一下这是个什么玩意儿。
原来是这样的,就是if __name__ == '__main__':包裹的内容只能在当前python文件中运行,当该文件import到其他文件时,if __name__ == '__main__':中的代码就不会被运行。
写个demo1:
print("我是demo1")print(__name__)
if __name__ == '__main__':
print("我是demo1-mian后边的东西")
print(__name__)
运行之后是这个样子的:
再搞个demo2:
import demo1print(__name__)
运行之后是这样的:
我们看到demo2确实没有输出demo1if __name__ == '__main__':之后的内容。
并且分析一下输出:
- demo1中的两个print(__name__)输出的都是__main__
- demo2中的print(__name__)输出的也是__main__,但是import过来的print(__name__)(就是demo1if __name__ == '__main__':之前的那个)输出的是demo1
__name__
由此我们可以知道:
- 在本文件中__name__就是__main__
- 当文件被import到其他文件中时,被import的文件中的__name__就会显示所在文件名。
换个更专业的说法:
- __name__是一个变量,前后加了双下划线是因为这是系统定义的名字(python中系统变量都是双下划线开头结尾,普通变量不使用这种命名方式)
- __name__是用来标识模块名字的一个系统变量。这里分两种情况:
- 第一种情况指的是当前运行的模块,那么当前模块__name__的值就为"__main__";
- 第二种情况指的是该模块是使用import导入的模块,那么这个被导入模块的__name__变量的值为该模块的文件名(去掉.py)。