python之if __name__ == '__main__',__name___main__,概要: 之前一直在写



概要:

之前一直在写shell最近在学习python,在学习中看到书上举例的代码有这样一行:

if__name__==‘__main__‘

百度看了很多解释也没彻底弄懂,自己又继续研究最后总结一下,如有不对的地方请根正不胜感激。



网上的解释很多都是说这句代码的含义是为了调用。说的对,但是不全,为了更好的理解我写了两个脚本进行测试(这里我直接在虚拟机上编写了学习的时候还是建议使用Python的IDE来提高我们的效率)

脚本1:

[[email protected]tmp]#catname.py#!/usr/bin/envpythondefppy():print"python"defbby():print"atiger77"if__name__==‘__main__‘:ppy()bby()[[email protected]tmp]#

注释:在name.py中写了一个叫ppy和bby的函数,这两个函数的功能就是输出“python和atiger77”并在结尾处调用它们()。

运行脚本1:

[[email protected]tmp]#pythonname.pypythonatiger77

运行后发现看到了ppy函数的内容说明符合了if的条件,这里要说明的是当执行脚本自身是肯定符合if __name__ == ‘__main__‘:的情况,既然都是真为什么还要写这个判断呢,我们继续看下去。


脚本2:

[[email protected]tmp]#cattname.pyfromnameimport*ppy()bby()

注释:脚本2中只有3行内容,第一行使用import命令调用name.py第一个脚本,然后使用第一个脚本中的ppy和bby函数。

脚本2执行结果:

[[email protected]tmp]#pythontname.pypythonatiger77

这里看到了ppy和bby函数的输出回显说明调用成功了,接下来修改name.py函数内容。


让我们来注释在name.py中if __name__ == ‘__main__‘:语句,再次测试:

[[email protected]tmp]#catname.pydefppy():print"python"defbby():print"atiger77"#if__name__==‘__main__‘:ppy()bby()[[email protected]tmp]#pythonname.pypythonatiger77[[email protected]tmp]#

注释:这里需要注意的是python严格控制缩进,在注释了if语句后需要将ppy和bby提前否则不会输出内容。


让我们再次执行tname.py,我们可以看到下面的回显:

[[email protected]tmp]#pythontname.pypythonatiger77pythonatiger77

可以看出没有了if判断调用的时候会将name.py中全部内容执行了一遍,所以会有输出2次bby和ppy函数的内容。


总结:

这里再回头看下百度上的总结就会很清晰了,当程序是自身运行时,其__name__的值就是字符串"__main__"了,如果是被其他程序调用,那么它的__name__的值就不是字符串"__main__",使用下面这个判断的作用就是使程序只有在自身被运行的情况下才执行,如果只是被调用,那么就不运行了。


由于刚学习python不久写的不对的地方还请指出,本人从事linux运维工作如有志同道合的朋友咱们可以一起学习交流。

微信号:atiger77

本文出自 “一个喜欢linux的“猪”” 博客,请务必保留此出处http://atiger77.blog.51cto.com/5258236/1675353

python之if __name__ == '__main__'

评论关闭