加入收藏 | 设为首页 | 会员中心 | 我要投稿 北几岛 (https://www.beijidao.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Python 中 __name__ == '__main__' 的作用

发布时间:2021-05-21 04:55:12 所属栏目:大数据 来源: https://blog.csdn.net/yilovex
导读:简述 经常,会在 Python 模块中看到? if __name__ == '__main__': ?这样的代码,究竟有什么作用呢? 有句话经典地概括了这段代码的意义: Make a script both importable and executable 意思是说: 模块既可以被导入(到 Python shell 或者其他模块中),也

简述

经常,会在 Python 模块中看到?if __name__ == '__main__':?这样的代码,究竟有什么作用呢?

有句话经典地概括了这段代码的意义:

Make a script both importable and executable

意思是说:模块既可以被导入(到 Python shell 或者其他模块中),也可以作为脚本来执行。

  • 简述
  • __name__ 属性
  • 让模块既可以导入又可以执行
  • 通用形式

版权所有:一去丶二三里,转载请注明出处:http://blog.csdn.net/liang19890820

__name__?属性

所有模块都有一个内置的属性?__name____name__?的值取决于如何使用这个模块。

例如,有一个名为?calc.py?的模块,包含以下代码:

print('__name__:',__name__)
   
  • 1

当导入模块时,__name__?是模块的文件名:

>>> import calc
__name__: calc
   
  • 1
  • 2

但是,如果将其作为脚本使用,__name__?就是一个特殊的值?__main__

$ python calc.py 
__name__: __main__
   
    2

由此,可以得出一个结论:当模块被导入时,模块名称是文件名;而当模块作为脚本独立运行时,名称为?__main__

让模块既可以导入又可以执行

回到最初的问题:if __name__ == '__main__':

通过上面的结论,可以推断出:只有当模块直接运行(即:不导入)时,才会执行?if?块内的代码。

修改一下?calc.py?模块,内容如下:

def add(a,b):
    return a + b

print('test: 2 + 3 =',add(2,3))
   
    2
  • 3
  • 4

将其作为模块导入:

$ python calc.py 
test: 2

显然,无论使用哪种方式,都会执行打印语句。

如果模块只会被用作脚本,那没什么问题,但若希望将其作为一个导入模块时,往往不想打印出测试用例。在这种情况下,__name__?就派上用场了。

完善?calc.py?模块,为其添加一个?if?语句:

:
    print(4
  • 5
  • 这时,再导入模块,不会执行任何打印语句:

    2
    
    

    这就是?__name__?的神奇之处,可以利用这个特性为模块提供用户界面,或对模块进行测试(将模块作为脚本运行,来执行测试用例)。

    通用形式

    实际上,在 Python 中,一个名为?main?的函数没有任何特殊的作用。

    然而,通常的做法是在?main?函数中组织一个程序的主要功能,并使用类似于以下代码进行调用:

    sys.exit()?用于退出程序,其中 0 表示正常退出,其他值表示异常退出。

    版权声明:进步始于交流,收获源于分享!纯正开源之美,有趣、好玩、靠谱。。。作者:一去丶二三里 博客地址:http://blog.csdn.net/liang19890820

    (编辑:北几岛)

    【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

      推荐文章
        热点阅读