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 相关文章推荐
Django在Win7下的安装及创建项目hello word简明教程
Jul 14 Python
Python基础语法(Python基础知识点)
Feb 28 Python
Python脚本实现虾米网签到功能
Apr 12 Python
Python面向对象编程之继承与多态详解
Jan 16 Python
Python之csv文件从MySQL数据库导入导出的方法
Jun 21 Python
Python3.5内置模块之random模块用法实例分析
Apr 26 Python
python 实现GUI(图形用户界面)编程详解
Jul 17 Python
深入解析神经网络从原理到实现
Jul 26 Python
深入了解python中元类的相关知识
Aug 29 Python
Python Scrapy多页数据爬取实现过程解析
Jun 12 Python
keras读取训练好的模型参数并把参数赋值给其它模型详解
Jun 15 Python
python 动态渲染 mysql 配置文件的示例
Nov 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
php Imagick获取图片RGB颜色值
2014/07/28 PHP
php生成rss类用法实例
2015/04/14 PHP
js实现DIV的一些简单控制
2007/06/04 Javascript
Javascript this关键字使用分析
2008/10/21 Javascript
用JS写的一个TableView控件代码
2010/01/23 Javascript
jquery autocomplete自动完成插件的的使用方法
2010/08/07 Javascript
提示$ is not defined错误分析及解决
2013/04/09 Javascript
js获取某月的最后一天日期的简单实例
2013/06/22 Javascript
js 实现日期灵活格式化的小例子
2013/07/14 Javascript
javascript实现修改微信分享的标题内容等
2014/12/11 Javascript
iscroll.js的上拉下拉刷新时无法回弹的解决方法
2016/02/18 Javascript
jQuery Easyui使用(一)之可折叠面板的布局手风琴菜单
2016/08/17 Javascript
jquery实现文字单行横移或翻转(上下、左右跳转)
2017/01/08 Javascript
js每隔两秒输出数组中的一项(实例)
2017/05/28 Javascript
详解Vue.js项目API、Router配置拆分实践
2018/03/16 Javascript
vue-cli3.0使用及部分配置详解
2018/08/29 Javascript
vue 点击展开显示更多(点击收起部分隐藏)
2019/04/09 Javascript
JS中封装axios来管控api的2种方式
2019/09/11 Javascript
详解vue-router 动态路由下子页面多页共活的解决方案
2019/12/22 Javascript
查看Python安装路径以及安装包路径小技巧
2015/04/28 Python
python实现将文本转换成语音的方法
2015/05/28 Python
python多线程调用exit无法退出的解决方法
2019/02/18 Python
pytorch中如何使用DataLoader对数据集进行批处理的方法
2019/08/06 Python
python argparse模块通过后台传递参数实例
2020/04/20 Python
Python3.8.2安装包及安装教程图文详解(附安装包)
2020/11/28 Python
纯CSS3实现Material Design效果
2017/03/09 HTML / CSS
一款超酷的js+css3实现的3D标签云特效兼容ie7/8/9
2013/11/18 HTML / CSS
HTML页面中添加Canvas标签示例
2015/01/01 HTML / CSS
error和exception有什么区别
2012/10/02 面试题
用C#语言写出与SQLSERVER访问时的具体过程
2013/04/16 面试题
应届行政管理专业个人自我评价
2013/12/28 职场文书
幼儿园父亲节活动方案
2014/03/11 职场文书
商业街策划方案
2014/05/31 职场文书
2014年社区计生工作总结
2014/11/18 职场文书
2019个人工作态度自我评价
2019/04/24 职场文书
python 闭包函数详细介绍
2022/04/19 Python