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读写ini文件示例(python读写文件)
Mar 25 Python
python实现树形打印目录结构
Mar 29 Python
浅谈dataframe中更改列属性的方法
Jul 10 Python
python实现停车管理系统
Nov 30 Python
用python生成(动态彩色)二维码的方法(使用myqr库实现)
Jun 24 Python
Django之路由层的实现
Sep 09 Python
Python如何将图像音视频等资源文件隐藏在代码中(小技巧)
Feb 16 Python
PyQt5中向单元格添加控件的方法示例
Mar 24 Python
Python如何输出整数
Jun 07 Python
浅析NumPy 切片和索引
Sep 02 Python
Python自动化之UnitTest框架实战记录
Sep 08 Python
如何利用Python实现n*n螺旋矩阵
Jan 18 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
用文本文件制作留言板提示(下)
2006/10/09 PHP
PHP 创建标签云函数代码
2010/05/26 PHP
PHP url的pathinfo模式加载不同控制器的简单实现
2016/08/12 PHP
php脚本守护进程原理与实现方法详解
2017/07/20 PHP
背景图跟随鼠标移动的Mootools插件实现代码
2011/12/12 Javascript
Extjs grid panel自带滚动条失效的解决方法
2014/09/11 Javascript
jQuery中:contains选择器用法实例
2014/12/30 Javascript
JS全局变量和局部变量最新解析
2016/06/24 Javascript
使用BootStrap实现表格隔行变色及hover变色并在需要时出现滚动条
2017/01/04 Javascript
javascript添加前置0(补零)的几种方法
2017/01/05 Javascript
JS传参及动态修改页面布局
2017/04/13 Javascript
node.js中使用Export和Import的方法
2017/09/18 Javascript
总结js中的一些兼容性易错的问题
2017/12/18 Javascript
vue2.0使用v-for循环制作多级嵌套菜单栏
2018/06/25 Javascript
解决angularjs中同步执行http请求的方法
2018/08/13 Javascript
Postman的下载及安装教程详解
2018/10/16 Javascript
详解NodeJS Https HSM双向认证实现
2019/03/12 NodeJs
简单易扩展可控性强的Jquery转盘抽奖程序
2019/03/16 jQuery
微信小程序城市选择及搜索功能的方法
2019/03/22 Javascript
小程序云函数调用API接口的方法
2019/05/17 Javascript
新手入门js闭包学习过程解析
2019/10/08 Javascript
Python 探针的实现原理
2016/04/23 Python
十分钟利用Python制作属于你自己的个性logo
2018/05/07 Python
WIn10+Anaconda环境下安装PyTorch(避坑指南)
2019/01/30 Python
Python3.4解释器用法简单示例
2019/03/22 Python
解决Jupyter notebook更换主题工具栏被隐藏及添加目录生成插件问题
2020/04/20 Python
python产生模拟数据faker库的使用详解
2020/11/04 Python
linux系统下pip升级报错的解决方法
2021/01/31 Python
美国棒球装备和用品商店:Baseball Savings
2018/06/09 全球购物
const和static readonly区别
2013/05/20 面试题
网友共享的几个面试题关于Java和Unix等方面的
2016/09/08 面试题
优秀毕业生自荐信范文
2014/01/01 职场文书
竞聘演讲稿精彩开头和结尾
2014/05/14 职场文书
师范生见习报告
2014/10/31 职场文书
六年级作文之自救
2019/12/19 职场文书
总结Python变量的相关知识
2021/06/28 Python