前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python中__name__有什么用

Python中__name__有什么用

作者头像
老齐
发布2021-03-11 15:14:44
5270
发布2021-03-11 15:14:44
举报
文章被收录于专栏:老齐教室老齐教室

注: 有的读者在学习《Python大学实用教程》第7章模块和包时,对变量__name__感到困惑,现补充解释。

与本书有关的更多资料,请访问: http://www.itdiffer.com/python_course.html


在Python程序中,你会经常看到__name__,例如:

代码语言:javascript
复制
if __name__ == '__main__':
    main()

本文将介绍如何正确使用和理解这个变量。

请注意,__name__在程序中是一个变量,只不过这个变量的命名有点奇怪,用双下划线开头和结尾。这种命名的方法,在Pyhton的类对象设计中,常常用于一些具有特殊作用的属性或者方法名称[2]。

如果将编写的一个Python文件,即.py为扩展名的文件,作为模块被其他程序引入的时候,我们需要通过__name__这个变量,决定在引入的时候是否要运行该文件。

例如创建一个文件namescript.py,内容如下:

代码语言:javascript
复制
def my_function():
    print('the value of __name__ is ' + __name__)
    
def main():
    my_function()
    
if __name__ == "__main__":
    main()

如果执行namescript.py文件,其执行流程如下:

在程序中的代码被执行之前,Python解析器先给__name__变量赋值为__main__。然后逐行执行程序中的代码。注意,当执行到第7行的时候,判断__name__的值是否为__main__,如果条件为真,就执行main()这个前面自定义的函数,并最终打印出结果。

如果将namescript.py文件作为一个模块,在另外一个文件中引入,例如在名为importingscript.py的文件中,有代码:

代码语言:javascript
复制
import namescript as ns

ns.my_function()

这样,就在importingscript.py文件中使用了namescript.py文件中定义的函数my_function。如此,避免了重复代码,而且提升了开发效率。这是Python语言的重要特点。

如果执行importscript.py文件,其流程如下图所示:

importscript.py中,变量__name__被赋值为__main__,然后执行import namescript,Python解析器会自动在模块名字后面增加.py并在检索目录中查找该文件——所以,在引入模块的时候不要写成import namescript.py。找到了,就引入该文件中的所有代码。

然后,将namescript.py文件所运行的空间中的__name__设置为namescript。结合上图,在importingscript.pynamescript.py中,分别有两个同名的__name__变量,但是,它们的值不同。如此,在namescript.py中,因为__name__的值是namescript了,于是该文件中的if __name__ == "__main__"条件不再成立,所以此条件下的main()函数不再执行。

importingscript.py中,调用了namescript.my_function(),打印的结果是:the value of __name__ is namescript,这里的__name__当然是namescript.py中的变量。

如果在importingscript.py中,增加print(__name__),打印出来的结果应该是__main__

本文内容作为《Python大学实用教程》第7章的补充和拓展,从而理解__name__变量的作用及其在模块编写中的应用效果。

参考文献:

[1]. https://medium.com/free-code-camp/whats-in-a-python-s-name-506262fe61e8

[2]. Python大学实用教程. 齐伟. 北京:电子工业出版社. 2019.3,第1版

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-02-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 老齐教室 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 参考文献:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档