下划线(_)在python中的作用

下划线(_)在python中有4种使用场景

  1. 在交互式解释器中保存最后一个表达式的值
  2. 指向被忽略的值
  3. 字面上分割数字
  4. 赋予属性和方法特性含义

接下来,我会逐一介绍这4个作用

1. 在交互式解释器中保存最后一个表达式的值

>>> a = 5
>>> a*3
15
>>> _ * 2
30
>>>

在python交互式解释器中,_ 会保存最后一个表达式的值,下一次你想使用最后一个表达式的值时,可以直接使用下划线_ 来表示。

2. 指向被忽略的值

当我们接收函数的多个返回值时,其中某一个是我们不需要的,为了这个不需要的返回值,起一个变量名实在麻烦,这时候,你就可以用下划线来处理这种情况

def func():
    """
    返回姓名,年龄,身高,体重
    :return:
    """
    return 'polly', 19, 165, 50


name, age, height, _ = func()

print(name, age, height)

体重这个返回值,后面的代码不会使用,没必要为它想一个变量名进行存储。

3. 字面上分割数字

这是python3.6以后新增的一个特性,在书写很大的int类型数值(支持多种进制)是时,可以在字面上将数值分割

dec_base = 134_000_000
bin_base = 0b_1101_0001
hex_base = 0x_1234_ab12

print(dec_base)
print(bin_base)
print(hex_base)

下划线只是在字面意义上对数值进行了分割,以便于更容易辨识数值的大小,大部分IDE还不支持这个特性,在pycharm里编写这段代码,会被识别为错误语法并提示,但实际运行不会报错。

4. 赋予属性和方法特性含义

4.1 单下划线开头

单下划线用来定义私有的变量,函数,方法,类,一旦使用的单下划线开头做定义,在import * 这种引入模式中就不会被引入。

def _get_name():
    pass

这种私有化声明并不是严格的,它只是作为一种约定而存在,你仍然可以强行引入这些被定义为私有的对象,如果一个类的某个方法是以单下划线开头的,你仍然可以直接使用该方法,像pycharm这样的编辑器,会提示你这样做不合理,但不会禁止你

4.2 单下划线结尾

单下划线结尾的情况,并不多见,它主要是为了避免和python中的关键字冲突,比如你在定义一个函数时,其中一个参数的含义是类型,那么你使用type来做参数的名字是比较贴切的,但type是保留关键字,不能随意使用,这时就可以这样定义

def func(type_):
    pass

4.3 双下划线开头

这种用法通常在定义类的方法时使用,它是一种语法,约定的属性相对弱一些。这种用法可以避免类与类之间的方法名称冲突,它告诉编辑器和解释器要在这个方法前以_ClassName的方式加上类的名字。

对于双下划线定义的类的方法,大家普遍认为它是真正的私有方法,无法直接调用。事实上,你的确可以这样理解并使用,但它仍然不是严格的私有方法,仍有途径可以进行调用

class MyTest:
    def __print(self):
        print("ok")

t = MyTest()
t._MyTest__print()      # 可以调用
t.__print()             # 报错

4.4 双下划线开头,双下划线结尾

这种用法用在有特殊功能的变量或方法上,这些变量或方法有特殊的语法属性和功能

  1. __file__ 存储表示当前python脚本的目录地址
  2. 当a == b 这种表达式被执行时,__eq__ 被执行
  3. 当一个对象被创建以后,__init__就会被执行,用于初始化

扫描关注, 与我技术互动

QQ交流群: 211426309

加入知识星球, 每天收获更多精彩内容

分享日常研究的python技术和遇到的问题及解决方案