Python中的单下划线和双下划线使用场景详解


Posted in Python onSeptember 09, 2019

单下划线

单下划线用作变量

最常见的一种使用场景是作为变量占位符,使用场景明显可以减少代码中多余变量的使用。为了方便理解,_可以看作被丢弃的变量名称,这样做可以让阅读你代码的人知道,这是个不会被使用的变量,e.g.。

for _, _, filenames in os.walk(targetDir):
  print(filenames)
  
for _ in range(100):
  print('PythonPoint')

在交互解释器比如iPython中,_变量指向交互解释器中最后一次执行语句的返回结果。

单下划线前缀名称(例如_pythonPoint)

  • 这表示这是一个保护成员(属性或者方法),只有类对象和子类对象自己能访问到这些变量,是用来指定私有变量和方法的一种方式(约定而已)。如果使用from a_module import *导入时,这部分变量和函数不会被导入。不过值得注意的是,如果使用import a_module这样导入模块,仍然可以用a_module._pythonPoint这样的形式访问到这样的对象。
  • 另外单下划线开头还有一种一般不会用到的情况,例如使用一个C编写的扩展库有时会用下划线开头命名,然后使用一个去掉下划线的Python模块进行包装。如struct这个模块实际上是C模块_struct的一个Python包装。

单下划线后缀名称

通常用于和Python关键词区分开来,比如我们需要一个变量叫做class,但class是Python的关键词,就可以以单下划线结尾写作class_

双下划线

双下划线前缀名称

这表示这是一个私有成员(属性或者方法)。它无法直接像公有成员一样随便访问。双下划线开头的命名形式在Python的类成员中使用表示名字改编,即如果Test类里有一成员__x,那么dir(Test)时会看到_Test__x而非__x。这是为了避免该成员的名称与子类中的名称冲突,方便父类和子类中该成员的区分识别。但要注意这要求该名称末尾最多有一个下划线。e.g.

Python中的单下划线和双下划线使用场景详解

双下划线前缀及后缀名称

一种约定,Python内部的名字,用来区别其他用户自定义的命名,以防冲突。是一些Python的“魔术”对象,表示这是一个特殊成员。如类成员的__init____del____add__等,以及全局的__file____name__等。Python官方推荐永远不要将这样的命名方式应用于自己的变量或函数,而是按照文档说明来使用Python内置的这些特殊成员。

Python中关于私有属性、方法约定问题,官方文档如下

“Private” instance variables that cannot be accessed except from inside an object don't exist in Python. However, there is a convention that is followed by most Python code: a name prefixed with an underscore (e.g. _spam) should be treated as a non-public part of the API (whether it is a function, a method or a data member). It should be considered an implementation detail and subject to change without notice.

Since there is a valid use-case for class-private members (namely to avoid name clashes of names with names defined by subclasses), there is limited support for such a mechanism, called name mangling. Any identifier of the form__spam (at least two leading underscores, at most one trailing underscore) is textually replaced with _classname__spam, where classname is the current class name with leading underscore(s) stripped. This mangling is done without regard to the syntactic position of the identifier, as long as it occurs within the definition of a class.

Name mangling is helpful for letting subclasses override methods without breaking intraclass method calls.

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
在arcgis使用python脚本进行字段计算时是如何解决中文问题的
Oct 18 Python
Python语言描述机器学习之Logistic回归算法
Dec 21 Python
Pandas 数据框增、删、改、查、去重、抽样基本操作方法
Apr 12 Python
python批量修改图片大小的方法
Jul 24 Python
浅谈关于Python3中venv虚拟环境
Aug 01 Python
python Django里CSRF 对应策略详解
Aug 05 Python
python 利用pyttsx3文字转语音过程详解
Sep 25 Python
python生成特定分布数的实例
Dec 05 Python
python如何查看安装了的模块
Jun 23 Python
在终端启动Python时报错的解决方案
Nov 20 Python
python 实现图片特效处理
Apr 03 Python
python自动获取微信公众号最新文章的实现代码
Jul 15 Python
python 批量修改 labelImg 生成的xml文件的方法
Sep 09 #Python
Python定时发送天气预报邮件代码实例
Sep 09 #Python
python英语单词测试小程序代码实例
Sep 09 #Python
Python实现TCP通信的示例代码
Sep 09 #Python
Python3使用PySynth制作音乐的方法
Sep 09 #Python
python智联招聘爬虫并导入到excel代码实例
Sep 09 #Python
python 的 openpyxl模块 读取 Excel文件的方法
Sep 09 #Python
You might like
收音机频率指针指示不准确和灵敏度低问题
2021/03/02 无线电
德劲1103二次变频版的打磨
2021/03/02 无线电
thinkphp实现面包屑导航(当前位置)例子分享
2014/05/10 PHP
zend framework重定向方法小结
2016/05/28 PHP
javascript 设计模式之单体模式 面向对象学习基础
2010/04/18 Javascript
js 实现图片预加载(js操作 Image对象属性complete ,事件onload 异步加载图片)
2011/03/25 Javascript
javascript复制对象使用说明
2011/06/28 Javascript
jquery slibings选取同级其他元素的实现代码
2013/11/15 Javascript
JSONP获取Twitter和Facebook文章数的具体步骤
2014/02/24 Javascript
jquery动态添加删除一行数据示例
2014/06/12 Javascript
jQuery获取radio选中项的值实例
2016/06/18 Javascript
jQuery和hwSlider实现内容响应式可触控滑动切换效果附源码下载(二)
2016/06/22 Javascript
基于js对象,操作属性、方法详解
2016/08/11 Javascript
jQuery EasyUI Accordion可伸缩面板组件使用详解
2017/02/28 Javascript
jQuery Jsonp跨域模拟搜索引擎
2017/06/17 jQuery
在 Angular 中使用Chart.js 和 ng2-charts的示例代码
2017/08/17 Javascript
使用vue制作FullPage页面滚动效果
2017/08/21 Javascript
node.js中路由,中间件,ge请求和post请求的参数详解
2017/12/26 Javascript
JS二级菜单不同实现方法分析【4种方法】
2018/12/21 Javascript
微信小程序全选多选效果实现代码解析
2020/01/21 Javascript
基于JS+HTML实现弹窗提示是否确认提交功能
2020/06/17 Javascript
快速了解Vue父子组件传值以及父调子方法、子调父方法
2020/07/15 Javascript
[03:54]Ehome出征西雅图 回顾2016国际邀请赛晋级之路
2016/08/02 DOTA
Python3基础之函数用法
2014/08/13 Python
简单介绍利用TK在Python下进行GUI编程的教程
2015/04/13 Python
python抓取网页中图片并保存到本地
2015/12/01 Python
pytorch使用Variable实现线性回归
2019/05/21 Python
解决Python内层for循环如何break出外层的循环的问题
2019/06/24 Python
python实现网站微信登录的示例代码
2019/09/18 Python
使用CSS3的::selection改变选中文本颜色的方法
2015/09/29 HTML / CSS
俄罗斯品牌服装和鞋子在线商店:BRIONITY
2020/03/26 全球购物
2015年六一儿童节活动方案
2015/05/05 职场文书
初中开学典礼新闻稿
2015/07/17 职场文书
2016年小学生清明节广播稿
2015/12/17 职场文书
56句经典英文座右铭
2019/08/09 职场文书
Nginx访问日志及错误日志参数说明
2021/03/31 Servers