Python 中 __name__ == ‘__main__‘ 的作用

参考:https://blog.csdn.net/liang19890820/article/details/75081689


简述

经常会在Python模块中看到if __name__ == '__main__':这样的代码。

Make a script both importable and executable

这句话经典地概括了这段代码的意义,意思是模块既可以被导入(到 Python shell 或者其他模块中),也可以作为脚本来执行。

__name__ 属性

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

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

print('__name__:', __name__)

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

>>> import calc
__name__: calc

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

$ python calc.py 
__name__: __main__

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

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

回到最初的问题:if __name__ == '__main__':
通过上面的结论,可以推断出:只有当模块直接运行(即:不导入)时,才会执行 if 块内的代码。修改一下 calc.py 模块,内容如下:

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

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

将其作为模块导入:

>>> import calc
test: 2 + 3 = 5

再将其作为脚本来执行:

$ python calc.py 
test: 2 + 3 = 5

显然,无论使用哪种方式,都会执行打印语句。
如果模块只会被用作脚本,那没什么问题,但若希望将其作为一个导入模块时,往往不想打印出测试用例。在这种情况下,__name__ 就派上用场了。
完善 calc.py 模块,为其添加一个 if 语句:

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

if __name__ == '__main__':
    print('test: 2 + 3 =', add(2, 3))

这时,再导入模块,不会执行任何打印语句:

>>> import calc
>>> 

而将其作为脚本直接运行,却可以正常打印:

$ python calc.py 
test: 2 + 3 = 5

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

通用形式

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

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

def main():
    try:
        doMainthing()
        return 0
    except:
        return 1

if __name__ == "__main__":
    sys.exit(main())

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

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

吮指原味张

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值