加下划线的变量
2022-11-23
某些标识符类(除了关键字)具有特殊含义。这些类的命名模式以下划线字符开头,并以下划线结尾:
1 语法解读
1.1 _*
_*,表示不会被 from module import * 所导入。
1.2 _
- *
_在 match 语句内部的case模式中,_是一个软关键字,它表示通配符。 - 在此之外,交互式解释器会将最后一次求值的结果放到变量
_中。 (它与 print 等内置函数一起被存储于 builtins 模块。) - 在其他地方,
_是一个常规标识符。 它常常被用来命名 "特殊" 条目,但对 Python 本身来说毫无特殊之处。开发人员常用下划线表示改变私有变量,不希望被外部直接访问的变量,但是从语法上,这种加了一个下划线的变量依旧是可以从外部访问的,是一种伪私有变量。 - 它还经常被用来命名无需使用的变量。
1.3 __*__
若变量名称前后都有双下划线,则表示系统定义的名称,通常简称为 "dunder" 。这些名称由解释器及其实现(包括标准库)定义,并全局可用。
部分内置变量如下:
| 属性 | 含意 |
|---|---|
__doc__ | 该函数的文档字符串,没有则为 None;不会被子类继承。 |
__name__ | 该函数的名称。 |
__qualname__ | 该函数的 qualified name。 |
__module__ | 该函数所属模块的名称,没有则为 None。 |
__defaults__ | 由具有默认值的参数的默认参数值组成的元组,如无任何参数具有默认值则为 None。 |
__code__ | 表示编译后的函数体的代码对象。 |
__globals__ | 对存放该函数中全局变量的字典的引用 |
__dict__ | 命名空间支持的函数属性。 |
__closure__ | None 或包含该函数可用变量的绑定的单元的元组 |
__annotations__ | 包含形参标注的字典。 |
__kwdefaults__ | 仅包含关键字参数默认值的字典。 |
___self__ | 为类实例对象本身 |
__func__ | 为函数对象 |
1.4 __*
在类中,使用前双下划线表示类的私有名称。类定义时,此类名称以一种混合形式重写,以避免基类及派生类的 "私有" 属性之间产生名称冲突。私有变量不能在外部访问。
2 案例
| |