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读写Redis数据库操作示例
Mar 18 Python
Python命令行参数解析模块getopt使用实例
Apr 13 Python
举例详解Python中yield生成器的用法
Aug 05 Python
浅谈python 四种数值类型(int,long,float,complex)
Jun 08 Python
Python中字符串格式化str.format的详细介绍
Feb 17 Python
Python中的is和==比较两个对象的两种方法
Sep 06 Python
python钉钉机器人运维脚本监控实例
Feb 20 Python
Pandas之Dropna滤除缺失数据的实现方法
Jun 25 Python
Python学习笔记之列表和成员运算符及列表相关方法详解
Aug 22 Python
在python shell中运行python文件的实现
Dec 21 Python
浅析Python3 pip换源问题
Jan 06 Python
Python绘图实现台风路径可视化代码实例
Oct 23 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
PHP中基本符号及使用方法
2010/03/23 PHP
php session安全问题分析
2011/06/24 PHP
Laravel框架路由和控制器的绑定操作方法
2018/06/12 PHP
JavaScript开发时的五个注意事项
2007/12/08 Javascript
最好用的省市二级联动 原生js实现你值得拥有
2013/09/22 Javascript
JavaScript版的TwoQueues缓存模型
2014/12/29 Javascript
JavaScript静态类型检查工具FLOW简介
2015/01/06 Javascript
JavaScript trim 实现去除字符串首尾指定字符的简单方法
2016/12/27 Javascript
Vue.js路由vue-router使用方法详解
2017/03/20 Javascript
JS库之ParticlesJS使用简介
2017/09/12 Javascript
AngularJS基于http请求实现下载php生成的excel文件功能示例
2018/01/23 Javascript
详解vue移动端项目的适配(以mint-ui为例)
2018/08/17 Javascript
微信小程序搭建自己的Https服务器
2019/05/02 Javascript
浅谈Vue.use到底是什么鬼
2020/01/21 Javascript
基于Ionic3实现选项卡切换并重新加载echarts
2020/09/24 Javascript
利用node.js开发cli的完整步骤
2020/12/29 Javascript
Windows下安装python2.7及科学计算套装
2015/03/05 Python
python实现定时播放mp3
2015/03/29 Python
Python写的一个简单监控系统
2015/06/19 Python
Django中URL视图函数的一些高级概念介绍
2015/07/20 Python
python队列queue模块详解
2018/04/27 Python
Django 登陆验证码和中间件的实现
2018/08/17 Python
Python3 使用cookiejar管理cookie的方法
2018/12/28 Python
Python WEB应用部署的实现方法
2019/01/02 Python
Python调用服务接口的实例
2019/01/03 Python
python将excel转换为csv的代码方法总结
2019/07/03 Python
PyTorch中的拷贝与就地操作详解
2020/12/09 Python
今天学到的CSS最新技术(与图片背景相关)
2012/12/24 HTML / CSS
英国汽车零件购物网站:GSF Car Parts
2019/05/23 全球购物
德国在线购买葡萄酒网站:Geile Weine
2019/09/24 全球购物
卡拉威高尔夫官方网站:Callaway Golf
2020/09/16 全球购物
局部内部类是否可以访问非final变量?
2013/04/20 面试题
大学生职业生涯规划范文
2013/12/31 职场文书
标准毕业生自荐信
2014/06/24 职场文书
我们的节日元宵节活动总结
2015/02/06 职场文书
结婚幸福感言
2015/08/01 职场文书