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 相关文章推荐
Python中自定义函数的教程
Apr 27 Python
Python 的内置字符串方法小结
Mar 15 Python
Python利用BeautifulSoup解析Html的方法示例
Jul 30 Python
Python爬虫实现抓取京东店铺信息及下载图片功能示例
Aug 07 Python
python 搜索大文件的实例代码
Jul 08 Python
HTML的form表单和django的form表单
Jul 25 Python
Python3 requests文件下载 期间显示文件信息和下载进度代码实例
Aug 16 Python
Python中内建模块collections如何使用
May 27 Python
django 模型字段设置默认值代码
Jul 15 Python
python批量提取图片信息并保存的实现
Feb 05 Python
python UIAutomator2使用超详细教程
Feb 19 Python
基于PyInstaller各参数的含义说明
Mar 04 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
解析thinkphp中的M()与D()方法的区别
2013/06/22 PHP
Zend Framework数据库操作技巧总结
2017/02/18 PHP
JS中的异常处理方法分享
2013/12/22 Javascript
javascript单引号和双引号的区别和处理
2014/05/14 Javascript
JavaScript实现Iterator模式实例分析
2015/06/09 Javascript
js实现带有介绍的Select列表菜单实例
2015/08/18 Javascript
javascript实现数组去重的多种方法
2016/03/14 Javascript
js根据手机客户端浏览器类型,判断跳转官网/手机网站多个实例代码
2016/04/30 Javascript
BootStrap创建响应式导航条实例代码
2016/05/31 Javascript
微信小程序商城项目之淘宝分类入口(2)
2017/04/17 Javascript
Jquery把获取到的input值转换成json
2017/05/15 jQuery
js实现方块上下左右移动效果
2017/08/17 Javascript
React中常见的动画实现的几种方式
2018/01/10 Javascript
微信小程序中使用自定义图标(阿里icon)的方法
2018/08/20 Javascript
vue项目中使用lib-flexible解决移动端适配的问题解决
2018/08/23 Javascript
解决vue项目nginx部署到非根目录下刷新空白的问题
2018/09/27 Javascript
微信小程序调用微信支付接口的实现方法
2019/04/29 Javascript
小程序封装路由文件和路由方法(5种全解析)
2019/05/26 Javascript
ES2020 新特性(种草)
2020/01/12 Javascript
jquery实现上传文件进度条
2020/03/26 jQuery
JavaScript中继承原理与用法实例入门
2020/05/09 Javascript
使用python删除nginx缓存文件示例(python文件操作)
2014/03/26 Python
python处理二进制数据的方法
2015/06/03 Python
Python实现针对含中文字符串的截取功能示例
2017/09/22 Python
python根据txt文本批量创建文件夹
2020/12/08 Python
python读取图片的方式,以及将图片以三维数组的形式输出方法
2019/07/03 Python
PyCharm GUI界面开发和exe文件生成的实现
2020/03/04 Python
Python Tkinter图形工具使用方法及实例解析
2020/06/15 Python
M1芯片安装python3.9.1的实现
2021/02/02 Python
Jack Rogers官网:美国经典的女性鞋靴品牌
2019/09/04 全球购物
Belvilla法国:休闲度假房屋出租
2020/10/03 全球购物
The North Face官方旗舰店:美国著名户外品牌
2020/09/28 全球购物
中学生操行评语大全
2014/04/24 职场文书
公司周年庆典标语
2014/10/07 职场文书
2015医院个人工作总结范文
2015/05/21 职场文书
一篇文章了解正则表达式的替换技巧
2022/02/24 Javascript