zoukankan      html  css  js  c++  java
  • python 中__name__ = '__main__' 的作用

        python的初学者经常会问这样的问题:为什么python官方模块或其他第三方模块中,代码结尾都这样一句代码

    if __name__ == "__main__"
     
    这句代码是干什么用的呢,为什么要这么写呢。
     
    网上最常见的解释就是“Make a script both importable and executable”,意思就是说让你写的脚本模块既可以导入到别的模块中用,另外该模块自己也可执行。这句话不好理解,也没有回答为什么要这样写,不这样写会有什么后果。下面举例子来说明。
     
    #nametest.py
    def test():
      print "we are in %s"%__name__
    if __name__ == '__main__':
      test()
    
     
    直接运行这段代码的时候,会发现结果是打印出“we are in __main__”,说明我们的if语句中的内容被执行了,并且调用了test()。
    再看下一个例子。
     
    #nametest2.py
    from nametest import test
    test()
     
    运行结果是:“we are in nametest”。也就是说,test函数执行了,但nametest.py模块下的if语句并没有执行。因为此时__name__变量为模块名称nametest。
     
    再来看另外一种情况。如果我们不写“if __name__ == '__main__'” 这句,而是直接在模块末尾执行test()函数
     
    #nametest.py
    def test():
      print "we are in %s"%__name__
    test()
     
    直接运行的时候,仍然会打印出“we are in __main__”,很明显,test()执行了。如果我们在其他模块中导入此模块,情况会怎样呢?
     
    #nametest2.py
    from nametest import test
    test()
     
    我们会发现,打印出了两行“we are in nametest”。原因在于,模块nametest2在import test的时候,test()执行了一次,该模块中test()又执行了一次。
    因此,为了使模块中的函数可以单独执行,又为了避免在导入的同时直接执行。需要加上“if __name__ == '__main__'”语句,并且把需要在单独运行该模块时就要执行的函数(比如模块的测试语句,等等)写在此语句内,这样可以使该模块被其他模块导入时,函数不会执行2次。
    (完)
  • 相关阅读:
    java实现可安装的exe程序
    WINDOWS上使用BAT定期执行备份操作
    Freemaker基于word模板动态导出
    网页静态化Freemarker
    Linux下Mysql每天自动备份
    搭建cas单点登录服务器
    GridView多列排序
    python学习-发送邮件(smtp)
    python3+selenium3学习——发送邮件
    redis相关-基础语法
  • 原文地址:https://www.cnblogs.com/zhmhhu/p/7259472.html
Copyright © 2011-2022 走看看