Python 下划线含义

本文介绍了 Python 中单下划线和双下划线的各种含义及命名约定。

单前导下划线

示例:_var

单下划线开头的命名方式常在模块中使用,有一个约定俗成的含义,表示希望这个变量或方法仅供 内部使用,是对开发者的一种提示。在类中使用时表示 受保护成员,意思是只有类对象和子类对象能访问到这些数据。在实际使用中不能用 from module import * 导入,但允许使用 from module import xxx 导入。

单末尾下划线

示例:var_

单下划线结尾的命名方式也存在,但是不常用,其实也不推荐用。这种命名方式的作用就是为了和 Python 的一些内置关键词区分开来,假设我们想给一个变量命名为 class,但是这会跟 Python 的关键词 class 冲突,所以我们只好退一步使用单下划线结尾命名,也就是 *class_*。

双前导下划线

示例:__var

双下划线开头的命名方式有更为实际的作用,表示类的 私有成员,只允许类本身访问,连子类对象也不能访问到这些数据,也无法直接通过 对象名.成员名 这样的方式访问。双下划线前缀会导致 Python 解释器重写属性名称,以避免子类中的命名冲突,这种行为也叫做 名称修饰(name mangling)

可以使用内置的 dir() 方法查看对象属性。

双前导双末尾下划线

示例:__var__

以双下划线开头和结尾的是 Python 中的 “魔术” 对象,是特殊方法专用的标识,如类成员的 __init____del____add____getitem__ 等,以及全局的 __file____name__ 等。需要注意的是,如果一个名字同时以双下划线开头和结尾,则不会应用名称修饰,即被双下划线前缀和后缀包围的变量不会被 Python 解释器修改。

Python 官方推荐 永远不要 将这样的命名方式应用于自己的变量或方法,而是按照文档说明来使用,以避免与将来的 Python 语言产生冲突。

单下划线

示例:_

按照习惯,有时候单个的独立下划线可以用作一个名字,来表示某个变量是 临时的无关紧要的。例如,在下面的循环中,我们不需要访问正在运行的索引,那么可以使用 _ 来表示它只是一个临时值:

1
2
>>> for _ in range(32):
... print('Hello, World.')

除了用作临时变量之外,_ 是大多数 Python REPL(交互窗口)中的一个特殊变量,表示由解释器评估的最近一个表达式的结果,例如:

1
2
3
4
>>> 2 + 3
5
>>> _
5

小结

模式 举例 含义
单前导下划线 _var 命名约定,表示希望变量或方法仅供内部使用。
单末尾下划线 var_ 命名约定,用于避免和 Python 的一些内置关键词冲突。
双前导下划线 __var 在类中使用时会触发名称修饰,类似于 Python 的 “私有变量”。
双前导双末尾下划线 __var__ Python 语言定义的 “魔术” 对象,应该避免使用这种命名方式。
单下划线 _ 作为临时的或无关紧要的变量的名称。