if __name__ == '__main__': 的解释

在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__':意思就是,如果是飞本脚本调用的不输出本脚本调用的结果



猜你喜欢

转载自blog.51cto.com/853056088/2128042