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

发布时间:2023年12月29日

很多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--

文章来源:https://blog.csdn.net/qm5132/article/details/135289481
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。