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 相关文章推荐
Pyramid添加Middleware的方法实例
Nov 27 Python
Pyhton中防止SQL注入的方法
Feb 05 Python
OpenCV实现人脸识别
Apr 07 Python
对python中raw_input()和input()的用法详解
Apr 22 Python
Django读取Mysql数据并显示在前端的实例
May 27 Python
python中plot实现即时数据动态显示方法
Jun 22 Python
对Python3之进程池与回调函数的实例详解
Jan 22 Python
使用python读取.text文件特定行的数据方法
Jan 28 Python
Python分析彩票记录并预测中奖号码过程详解
Jul 09 Python
利用 Python ElementTree 生成 xml的实例
Mar 06 Python
理解Django 中Call Stack机制的小Demo
Sep 01 Python
在前女友婚礼上,用Python破解了现场的WIFI还把名称改成了
May 28 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
PHP学习之PHP表达式
2006/10/09 PHP
sourcesafe管理phpproj文件的补充说明(downmoon)
2009/04/11 PHP
php 多关键字 高亮显示实现代码
2012/04/23 PHP
php curl获取网页内容(IPV6下超时)的解决办法
2013/07/16 PHP
php中\r \r\n \t的区别示例介绍
2014/02/08 PHP
DWZ table的原生分页浅谈
2013/03/01 Javascript
jQuery实现公告文字左右滚动的实例代码
2013/10/29 Javascript
jquery获得option的值和对option进行操作
2013/12/13 Javascript
jQuery中contents()方法用法实例
2015/01/08 Javascript
JavaScript获取DOM元素的11种方法总结
2015/04/25 Javascript
如何使用PHP+jQuery+MySQL实现异步加载ECharts地图数据(附源码下载)
2016/02/23 Javascript
NodeJs的优势和适合开发的程序
2016/08/14 NodeJs
JS取数字小数点后两位或n位的简单方法
2016/10/24 Javascript
Nodejs基于LRU算法实现的缓存处理操作示例
2017/03/17 NodeJs
整理关于Bootstrap列表组的慕课笔记
2017/03/29 Javascript
bootstrap日期控件问题(双日期、清空等问题解决)
2017/04/19 Javascript
详解Vue-Cli 异步加载数据的一些注意点
2017/08/12 Javascript
node.js ws模块搭建websocket服务端的方法示例
2019/04/25 Javascript
vue 实现LED数字时钟效果(开箱即用)
2019/12/08 Javascript
详解搭建一个vue-cli的移动端H5开发模板
2020/01/17 Javascript
在DigitalOcean的服务器上部署flaskblog应用
2015/12/19 Python
解决python3 HTMLTestRunner测试报告中文乱码的问题
2018/12/17 Python
Pycharm运行加载文本出现错误的解决方法
2019/06/27 Python
python基于K-means聚类算法的图像分割
2019/10/30 Python
对Tensorflow中Device实例的生成和管理详解
2020/02/04 Python
基于Python数据分析之pandas统计分析
2020/03/03 Python
解决Python spyder显示不全df列和行的问题
2020/04/20 Python
python中用ctypes模拟点击的实例讲解
2020/11/26 Python
pytorch 把图片数据转化成tensor的操作
2021/03/04 Python
美国网上眼镜商城:Zenni Optical
2016/11/20 全球购物
拉斯维加斯酒店、演出、旅游、俱乐部及更多:Vegas.com
2019/02/28 全球购物
写出一个方法实现冒泡排序
2016/07/08 面试题
学生会竞选演讲稿怎么写
2014/08/26 职场文书
三方合作意向书范本
2015/05/09 职场文书
活动总结书怎么写
2015/05/11 职场文书
为自己工作观后感
2015/06/11 职场文书