Python中__name__到底是什么?了解一下

很多Python项目,在.py文件底部都有下面的代码块,Python初学者通常会好奇if语句中的__name__有什么作用。

if __name__ == "__main__":
    main()

先说结论:

__name__实际上就是一个内置、特殊属性(变量),代表模块、类、函数的名字。

详细说明:

官方定义说明:对于__name__,Python官网的解释如下:

翻译过来,__name__属于Python内部的特别属性,为类、函数、方法等的名字。

以__name__作为关键词继续在Python的官方Doc搜索,得到下面的截图:

这张截图进一步说明__name__为函数的名字。

实践效果:

创建2个py文件,其中aa.py文件

print("before AAClass")
class AAClass(object):
    print("run AAClass")
print("after AAClass")

print("before aa_function")
def aa_function():
    print("run aa_function")
print("after aa_function")

print("__name__ = ", __name__)
if __name__ == "__main__":
    print("if")
    aa_function()
else:
    print("else")

bb.py文件

from aa import aa_function

aa_function()

运放方式1:aa.py作为主程序直接运行,结果:

before AAClass
run AAClass
after AAClass
before aa_function
after aa_function
__name__ =  __main__
if
run aa_function

运行方式2:运行bb.py(将aa.py作为模块导入到bb.py中),结果:

before AAClass
run AAClass
after AAClass
before aa_function
after aa_function
__name__ =  aa
else
run aa_function

从上述结果分析,两种运行方式所得结果的区别在于倒数第3、第2行。

__name__取值会随模块的运行方式不同而不同:

(1)模块aa.py作为主程序直接运行时,__name__的取值等于字符串"__main__",aa.py会执行if语句。

(2)模块aa.py被import导入时,__name__取值为aa(模块名字,不含.py后缀),aa.py会执行else语句。

使用场景:

在if __name__ == "__main__"语句中添加测试代码,对模块中各个函数进行测试。当模块被import到其他模块中时也不需要改动(删除)测试代码。

本文原创,原始版本发表链接:

https://mp.weixin.qq.com/s?__biz=MzI2Mjg3NTY5MQ==&mid=2247484474&idx=1&sn=d725008ccd8427bd8d867b9b7b77fc44&chksm=ea453b7edd32b2680f8759df5be961f82688853524bc0ee9ef6c8f4899960918d58faf0eff7b#rd

kelly会在公众号「kelly学技术」不定期更新文章,感兴趣的朋友可以关注一下,期待与您交流。

--over--

  • 11
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值