下划线(_)在python中的作用
下划线(_)在python中有4种使用场景
- 在交互式解释器中保存最后一个表达式的值
- 指向被忽略的值
- 字面上分割数字
- 赋予属性和方法特性含义
接下来,我会逐一介绍这4个作用
1. 在交互式解释器中保存最后一个表达式的值
>>> a = 5 |
在python交互式解释器中,_ 会保存最后一个表达式的值,下一次你想使用最后一个表达式的值时,可以直接使用下划线_ 来表示。
2. 指向被忽略的值
当我们接收函数的多个返回值时,其中某一个是我们不需要的,为了这个不需要的返回值,起一个变量名实在麻烦,这时候,你就可以用下划线来处理这种情况
def func(): |
体重这个返回值,后面的代码不会使用,没必要为它想一个变量名进行存储。
3. 字面上分割数字
这是python3.6以后新增的一个特性,在书写很大的int类型数值(支持多种进制)是时,可以在字面上将数值分割
dec_base = 134_000_000 |
下划线只是在字面意义上对数值进行了分割,以便于更容易辨识数值的大小,大部分IDE还不支持这个特性,在pycharm里编写这段代码,会被识别为错误语法并提示,但实际运行不会报错。
4. 赋予属性和方法特性含义
4.1 单下划线开头
单下划线用来定义私有的变量,函数,方法,类,一旦使用的单下划线开头做定义,在import * 这种引入模式中就不会被引入。
def _get_name(): |
这种私有化声明并不是严格的,它只是作为一种约定而存在,你仍然可以强行引入这些被定义为私有的对象,如果一个类的某个方法是以单下划线开头的,你仍然可以直接使用该方法,像pycharm这样的编辑器,会提示你这样做不合理,但不会禁止你
4.2 单下划线结尾
单下划线结尾的情况,并不多见,它主要是为了避免和python中的关键字冲突,比如你在定义一个函数时,其中一个参数的含义是类型,那么你使用type来做参数的名字是比较贴切的,但type是保留关键字,不能随意使用,这时就可以这样定义
def func(type_): |
4.3 双下划线开头
这种用法通常在定义类的方法时使用,它是一种语法,约定的属性相对弱一些。这种用法可以避免类与类之间的方法名称冲突,它告诉编辑器和解释器要在这个方法前以_ClassName的方式加上类的名字。
对于双下划线定义的类的方法,大家普遍认为它是真正的私有方法,无法直接调用。事实上,你的确可以这样理解并使用,但它仍然不是严格的私有方法,仍有途径可以进行调用
class MyTest: |
4.4 双下划线开头,双下划线结尾
这种用法用在有特殊功能的变量或方法上,这些变量或方法有特殊的语法属性和功能
- file 存储表示当前python脚本的目录地址
- 当a == b 这种表达式被执行时,eq 被执行
- 当一个对象被创建以后,__init__就会被执行,用于初始化