下划线(_)在python中有4种使用场景
接下来,我会逐一介绍这4个作用
>>> a = 5
>>> a*3
15
>>> _ * 2
30
>>>
在python交互式解释器中,_ 会保存最后一个表达式的值,下一次你想使用最后一个表达式的值时,可以直接使用下划线_ 来表示。
当我们接收函数的多个返回值时,其中某一个是我们不需要的,为了这个不需要的返回值,起一个变量名实在麻烦,这时候,你就可以用下划线来处理这种情况
def func():
"""
返回姓名,年龄,身高,体重
:return:
"""
return 'polly', 19, 165, 50
name, age, height, _ = func()
print(name, age, height)
体重这个返回值,后面的代码不会使用,没必要为它想一个变量名进行存储。
这是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里编写这段代码,会被识别为错误语法并提示,但实际运行不会报错。
单下划线用来定义私有的变量,函数,方法,类,一旦使用的单下划线开头做定义,在import * 这种引入模式中就不会被引入。
def _get_name():
pass
这种私有化声明并不是严格的,它只是作为一种约定而存在,你仍然可以强行引入这些被定义为私有的对象,如果一个类的某个方法是以单下划线开头的,你仍然可以直接使用该方法,像pycharm这样的编辑器,会提示你这样做不合理,但不会禁止你
单下划线结尾的情况,并不多见,它主要是为了避免和python中的关键字冲突,比如你在定义一个函数时,其中一个参数的含义是类型,那么你使用type来做参数的名字是比较贴切的,但type是保留关键字,不能随意使用,这时就可以这样定义
def func(type_):
pass
这种用法通常在定义类的方法时使用,它是一种语法,约定的属性相对弱一些。这种用法可以避免类与类之间的方法名称冲突,它告诉编辑器和解释器要在这个方法前以_ClassName的方式加上类的名字。
对于双下划线定义的类的方法,大家普遍认为它是真正的私有方法,无法直接调用。事实上,你的确可以这样理解并使用,但它仍然不是严格的私有方法,仍有途径可以进行调用
class MyTest:
def __print(self):
print("ok")
t = MyTest()
t._MyTest__print() # 可以调用
t.__print() # 报错
这种用法用在有特殊功能的变量或方法上,这些变量或方法有特殊的语法属性和功能
QQ交流群: 211426309