在python中
if __name__ == '__main__': 的解释为
有句话经典的概括了这段代码的意义:
“Make a script both importable and executable”
意思就是说让你写的脚本模块既可以导入到别的模块中用,另外该模块自己也可执行。
在python中每一个python文件都是一个模块,别的python文件或者函数都可以调用到它,
如文件test1.py中有函数printinfo
在文件test2.py中需要调用test1.py中的printinfo这个函数就需要在test2.py这个文件中导入模块test1.py如:
在test2.py中就有
import test1
test1.printinfo
这样就能调用调用test1中的printinfo函数了,但是如果在test1.py中本身就有在调用printinfo这个函数,而且有输出了,那么在test2.py这个文件中调用printinfo就会导致有test1.py这个模块中的printinfo和test2.py这两个输出,会很乱,
但是如果我们加上了if __name__ == '__main__':
test2.py在调用test1.py的时候就只会有test2.py这个printinfo这个函数的输出,这样就不需要解释了吧!
他的作用就是,如果函数是本身文件调用的话输出的是函数,本文件的输出结果;如果不是本文件调用的话输出的就是其他文件调用的输出结果,
看下列子吧:
[root@master test]# cat main.py
#!/usr/bin/python
def printinfo(s,d):
print s,d
#if __name__=='__main__':
printinfo('hello world,ll','hell')
[root@master test]# cat bb.py
#!/usr/bin/python
import main
main.printinfo('hello','world')
[root@master test]# python main.py
hello world,ll hell
[root@master test]# python bb.py
hello world,ll hell
hello world
现在很明显,我在没有加上if __name__ == '__main__':的时候在bb脚本调用main脚本打印出来的是2个脚本一起的输出,
现在我加上if __name__ == '__main__':看下结果
[root@master test]# cat main.py
#!/usr/bin/python
def printinfo(s,d):
print s,d
if __name__=='__main__':
printinfo('hello world,ll','hell')
[root@master test]# python bb.py
hello world
加上他的结果就是只输出了脚本bb的结果,
总结,如果脚本间的互相调用,想要别的脚本也输出本脚本的函数结果就不用加上if __name__=='__main__':
如果不想别的脚本输出本脚本调用的结果就加上。
总之if __name__=='__main__':意思就是,如果是飞本脚本调用的不输出本脚本调用的结果