设为首页 收藏本站
查看: 2799|回复: 0

[经验分享] python 中的if __name__ == 'main'

[复制链接]

尚未签到

发表于 2015-4-27 08:38:31 | 显示全部楼层 |阅读模式
网上搜索的,下了保存

关于python模块问题:

    首先说模块:模块基本上就是一个包含了所有你定义的函数和变量的文件。为了在其他程序中重用模块,模块的文件名必须以.py为扩展名。我们利用import语句 输入需要使用的模块。
    每个模块都有一个内置的变量__name__。在模块自己运行的时候,该__name__就等于'main',而如果被其他的模块import,则该模块的__name__就等于模块名,也就是文件名去掉py扩展名的部分。
如下例子:转自http://www.iyunv.com/jansen2008/archive/2009/08/01/1536518.html
test.py

DSC0000.gif def test():
    print "test is running"

if __name__ == "__main__":#自运行时调用该程序块
    print "test main is working"

if __name__ == "test":#import时调用该程序块
    print "test is invoked"


自执行效果如图:
DSC0001.jpg
import执行效果如图:
DSC0002.jpg
执行test()方法效果如图:
DSC0003.jpg
通过这个例子,python应用模块的自测试程序都放在 if __name__ == "__main__" 条件块下是多么方便。
  
  
  if name=='_main_': #‘非导入时启动’功能
  main()

  
  
  就是直接执行这个脚本时, name='_mian_' 就成立了。
  就是执行本单元文件内的代码的入口
比如,你写一个代码文件 x.py
当你直接用python运行x.py的时候,会通过这个__main__作为入口!
  这样写可以方便测试,这个判断主要是判断主执行文件是不是当前文件。
  
  你运行当前脚本,就会执行if __name__=="__main__"下的函数,如果你是当模块被其他程序import的,那么就不会执行。主要是测试用,测试你写的这个模块有没有实现你想要的功能
  
  一般来说python写的文件既可以运行,也可以作为模块来被其他程序调用。
当程序是自身运行时,其__name__的值就是字符串"__main__"了,如果是被其他程序调用,那么它的__name__的值就不是字符串"__main__",使用下面这个判断的作用就是使程序只有在自身被运行的情况下才执行,如果只是被调用,那么就不运行了。
例如,有一个python程序是main.py,代码如下:



Python code


def run():
print "你好,世界!"
if __name__=="__main__":
run()

  
当你双击main.py时,那么这个程序就会运行了——因为它的__name__的值为"__main__"。
当你在其它程序中调用这个main.py文件,例如use.py:



Python code


import main.py #此处把前面的main.py作为模块调用

if __name__=="__main__":
main.run() #调用main.py中的run()函数!


  
这个if __name__=="__main__"判断,可以使这个条件语句块中的命令只在它独立运行时才执行!
(注意:此处main.py,和use.py两个文件必须放在一起!)
  
  
  


  当你打开一个.py文件时,经常会在代码的最下面看到if __name__ == '__main__':,现在就来介 绍一下它的作用.
  模块是对象,并且所有的模块都有一个内置属性 __name__。一个模块的 __name__ 的值取决于您如何应用模块。如果 import 一个模块,那么模块__name__ 的值通常为模块文件名,不带路径或者文件扩展名。但是您也可以像一个标准的程序样直接运行模块,在这 种情况下, __name__ 的值将是一个特别缺省"__main__"。
  ///////////////////////////////////////////////////////////////////////////////////////////////////
  在cmd 中直接运行.py文件,则__name__的值是'__main__';
  而在import 一个.py文件后,__name__的值就不是'__main__'了;
  从而用if __name__ == '__main__'来判断是否是在直接运行该.py文件
  如:
  #Test.py
  class Test:
  def __init(self):pass
  def f(self):print 'Hello, World!'
  if __name__ == '__main__':
  Test().f()
  #End
  
  你在cmd中输入:
  C:>python Test.py
  Hello, World!
  说明:"__name__ == '__main__'"是成立的
  
  你再在cmd中输入:
  C:>python
  >>>import Test
  >>>Test.__name__                #Test模块的__name__
  'Test'
  >>>__name__                       #当前程序的__name__
  '__main__'
  无论怎样,Test.py中的"__name__ == '__main__'"都不会成立的!
  所以,下一行代码永远不会运行到!
  //////////////////////////////////////////////////////////////////////////////////
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-60955-1-1.html 上篇帖子: Python零碎知识(2):强大的zip 下篇帖子: 编译python模块要求安装vs2003问题的Hack解决办法
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表