Python关于__name__属性的含义和作用详解


Posted in Python onFebruary 19, 2020

Python中的模块(.py文件)在创建之初会自动加载一些内建变量,__name__就是其中之一。Python模块中通常会定义很多变量和函数,这些变量和函数相当于模块中的一个功能,模块被导入到别的文件中,可以调用这些变量和函数。那么这时 __name__ 的作用就彰显了,它可以标识模块的名字,可以显示一个模块的某功能被自己执行还是被别的文件调用执行,假设模块A、B,模块A自己定义了功能C,模块B调用模块A,现在功能C被执行了:

如果C被A自己执行,也就是说模块执行了自己定义的功能,那么 __name__=='__main__'

如果C被B调用执行,也就是说当前模块调用执行了别的模块的功能,那么__name__=='A'(被调用模块的名字)

其实换一种说法也就是表示当前程序运行在哪一个模块中

下面举例说明:

首先自定义模块Student,在模块中定义功能Differ()

Python关于__name__属性的含义和作用详解

然后先自身执行,结果如下, __name__=='__main__'

Python关于__name__属性的含义和作用详解 

然后B调用执行,结果 __name__=='Student'

Python关于__name__属性的含义和作用详解 

Python关于__name__属性的含义和作用详解 

上面出两次结果,是因为python中导入模块会先将文件执行一遍,如下图Python关于__name__属性的含义和作用详解

到这儿可能有人已经注意到,上面的 __main__ 在python中作可以为函数的入口,而实际工程常用 if __name__=='__main__'来表示整个工程开始运行的入口。此外你如果不想让功能的某部分被别的模块调用执行,比如我自定的模块Student里的‘我的密码是xxx',只有自己执行才可以打印密码。所有你可以把部分写在if语句里,只有__name__=='__main__'的时候才能执行。这个可以这么理解,在if语句之外代码是最外层的,有点“全局变量”的意思,放入if里面就成了私有的了。

知识点扩充

1.__name__

__name__ 是属于 python 中的内置类属性,就是它会天生就存在与一个 python 程序中,代表对应程序名称。

也分两种情况:

1)当python程序自己执行时,__name__变量的值就是:__main__

2) 当python程序是作为模块被导入时,那么__name__变量的值就是:程序的文件名,也就是.py前面的文件名称。

2.使用场景

一般我们说使用场景,肯定会根据该知识点的功能来判断。

情况一:比如有个功能模块的程序test.py,在该程序里面有一部分是测试代码,测试代码块会输出内容,验证该程序是否能完成我们需求的功能。

但是我们在实际导入该模块时,不需要输出测试内容。因此可以用if语句判断__name__的值,进而限制测试代码是否执行。

以上就是三水点靠木结合多篇整理的相关内容,感谢大家的支持。

Python 相关文章推荐
Python中正则表达式详解
May 17 Python
Python实现采用进度条实时显示处理进度的方法
Dec 19 Python
解读python logging模块的使用方法
Apr 17 Python
Django1.9 加载通过ImageField上传的图片方法
May 25 Python
使用Python更换外网IP的方法
Jul 09 Python
python实现简单http服务器功能
Sep 17 Python
对pandas的层次索引与取值的新方法详解
Nov 06 Python
python 画二维、三维点之间的线段实现方法
Jul 07 Python
python字符串格式化方式解析
Oct 19 Python
Python如何使用turtle库绘制图形
Feb 26 Python
Python利用pip安装tar.gz格式的离线资源包
Sep 14 Python
python_tkinter事件类型详情
Mar 20 Python
opencv+python实现均值滤波
Feb 19 #Python
python手写均值滤波
Feb 19 #Python
pytorch实现CNN卷积神经网络
Feb 19 #Python
python+opencv3生成一个自定义纯色图教程
Feb 19 #Python
Python 实现Image和Ndarray互相转换
Feb 19 #Python
python3+opencv生成不规则黑白mask实例
Feb 19 #Python
使用celery和Django处理异步任务的流程分析
Feb 19 #Python
You might like
一个ubbcode的函数,速度很快.
2006/10/09 PHP
ThinkPHP 3.2 数据分页代码分享
2014/10/14 PHP
PHP观察者模式实例分析【对比JS观察者模式】
2019/05/22 PHP
用于table内容排序
2006/07/21 Javascript
javascript 继承实现方法
2009/08/26 Javascript
jquery中使用ajax获取远程页面信息
2011/11/13 Javascript
原生js和jquery中有关透明度设置的相关问题
2014/01/08 Javascript
jQuery之DOM对象和jQuery对象的转换与区别分析
2015/01/08 Javascript
jQuery中delegate()方法用法实例
2015/01/19 Javascript
JavaScript数组Array对象增加和删除元素方法总结
2015/01/20 Javascript
EXT中单击button按钮grid添加一行(光标位置可设置)的实例代码
2016/06/02 Javascript
学习Angular中作用域需要注意的坑
2016/08/17 Javascript
值得分享的bootstrap table实例
2016/09/22 Javascript
AngularJS实现Input格式化的方法
2016/11/07 Javascript
javascript和jQuery中的AJAX技术详解【包含AJAX各种跨域技术】
2016/12/15 Javascript
利用策略模式与装饰模式扩展JavaScript表单验证功能
2017/02/14 Javascript
vue复合组件实现注册表单功能
2017/11/06 Javascript
vue将时间戳转换成自定义时间格式的方法
2018/03/02 Javascript
vue better scroll 无法滚动的解决方法
2018/06/07 Javascript
了解javascript中的Dom操作
2019/05/27 Javascript
Vue两种组件类型:递归组件和动态组件的用法
2020/08/06 Javascript
微信小程序调用后台service教程详解
2020/11/06 Javascript
vue keep-alive的简单总结
2021/01/25 Vue.js
Python爬虫DNS解析缓存方法实例分析
2017/06/02 Python
在python中按照特定顺序访问字典的方法详解
2018/12/14 Python
python实现转圈打印矩阵
2019/03/02 Python
Django如何将URL映射到视图
2019/07/29 Python
python实现一个函数版的名片管理系统过程解析
2019/08/27 Python
PyTorch 解决Dataset和Dataloader遇到的问题
2020/01/08 Python
PyCharm License Activation激活码失效问题的解决方法(图文详解)
2020/03/12 Python
野兽派官方旗舰店:THE BEAST 野兽派
2016/08/05 全球购物
学生发电厂实习自我鉴定
2013/09/22 职场文书
高一自我鉴定
2013/12/17 职场文书
2013年研究生毕业感言
2014/02/06 职场文书
动漫设计与制作专业推荐信
2014/07/07 职场文书
新闻学专业求职信
2014/07/28 职场文书