• 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次。
    (完)
  • 相关阅读:
    Linux命令(一)
    数据库SQL学习(一)
    Eclipse
    VsCode支持的markdown语法参考(一)
    常用算法Tricks(一)
    dispose方法的使用
    收藏一个链接
    我还不知道取什么名字
    NioSocket的用法
    随便乱塞塞2~
  • 原文地址:https://www.cnblogs.com/zhmhhu/p/7259472.html
Copyright © 2020-2023  润新知