也看了一些别人的总结,这里就结合其他文章谈谈自己的理解。
Python中**if name == ‘main’:**我刚开始看的时候就直接把他当成了一个项目运行的开始,至于为什么也没有仔细研究,后来看得多了,就研究了一下。
__name__是每一个python文件的内置变量,是指当前被执行模块文件的名字(带后缀名.py),比如我们新建了 model01.py
# model01.py
def test(a, b):
print(a + b)
print(__name__)
if __name__ == '__main__':
test(3, 3)
__main__
6
main一直指当前模块文件(带后缀名.py),有的人可能会问这有区别吗?当然有,在导入之后main虽然还是指当前模块文件(带后缀名.py),但是name会发生改变。
然后又新建文件001.py
# 001.py
import model01
model01.test(4, 4)
print(__name__)
model01
8
__main__
对比上下两个程序不难发现__name__发生了变化,导入之后变成没了后缀名的,有的人问之前不就一个__main__吗,(你看model01.py里的__name__在第二个程序里面是model01,相当于从model.py变成了model01),如果还是不懂,这里举个例子,在model01.py里if name == ‘main’:就相当于if model01.py==model01.py:这里确实相等对吧,所以输出6。
但是在001.py中为什么没有执行model01.py的 if name == ‘main’:,因为在第二个程序看他们的时候,if name == ‘main’:相当于if model01==model01.py:这里就不相等了,所以没有执行去输出6,而只是执行输出了8。
这也就是我们在导入一些自己写的一些文件时程序自动运行,如果我们平时在写py文件的时候使用了这个就可以避免这个问题,这个在我们学习进程时使用multiprocessing模块创建子进程时更要使用这个,因为可以解决Windows下创建子进程递归报错的问题。当然要是Mac或者Linux不会出现递归的问题