海象运算符(:=)
官网介绍:Assignment expressions(赋值表达式)
There is new syntax := that assigns values to variables as part of a larger expression. It is affectionately known as “the walrus operator” due to its resemblance to the eyes and tusks of a walrus.
中译过来就是:这里有一个新的语法:=,它将值赋给一个更大的表达式中的变量。它被亲切地称为“海象操作员”,因为它长得像海象的眼睛和长牙。
定义
-
海象运算符是一种特殊的表达式,是具有返回值的,例如:
print(a = 10)
这是一个简单的赋值语句,没有返回值,所以还会
报错
。a = 10 print(a == 10)
这是一个表达式,会返回
True
或者False
。print(a := 10)
这是一个特殊的表达式,有返回值,返回值为被赋的值,此处返回
10
。
注意事项
- 无法单独成为一行
在python3.8
中海象运算符单独写成一行会报错。
以上这一行代码会报错,意味着海象运算符必须要实际投入到应用之中。a := 10
- 无法单独被赋值语句使用。
这样是不允许的,会报错:
这个原因仿佛是目前b = a := 10
python3.8
还无法区分海象运算符与赋值运算符的优先级。
所以,加上括号保证运算符的优先级后又是可以的:
以上打印的结果是b = (a := 10) print(b)
10
。
应用场景
- 使用在
if
中:
以上代码输出结果为if (a := 10) > 0: print(f"{a} > 0")
10 > 0
,如果不使用:=
,我们会这样写:
以上可以看出海象运算符简化了代码,相当于一个赋值的操作,注意使用海象运算符时需要加上括号,如果去掉括号:a = 10 if (a > 0): print(f"{a} > 0")
以上代码的输出结果为if a := 10 > 0: print(f"{a} > 0")
True > 0
,所以比较运算符的优先级大于海象运算符,代码执行时会先判断10 > 0
,返回True
,再将True
赋值给a
。 - 使用在
while
中:
以上代码会输出四条语句,如果不使用list = [1, 2, 3, 4, 0, 1] i = 0 while (num := list[i]) != 0: print("我不是0,循环可以继续") i += 1
:=
,我们会这样写:
看上去是不是感觉使用list = [1, 2, 3, 4, 0, 1] i = 0 num = list[i] while num != 0: print(f"{num}不是0,循环可以继续") i += 1 num = list[i]
:=
后简单了很多呢。 - 使用在
列表
中
以上代码打印结果为b = [(a := 0) + 1, a - 1, a * 1, a / 1]
[1, -1, 0, 0.0]
,如果我们不适用:=
,可以这样写:
打印结果同样为为a = 0 b = [a + 1, a - 1, a * 1, a / 1]
[1, -1, 0, 0.0]
,省去了给a
赋值这一行代码。
结语
python3.8
新增的海象运算符在后期会被广泛使用,它的应用场景也会越来越多,比如你还可以使用:=
给一个变量赋值一个正则表达式,或者赋值一个函数的返回值,从而在下次使用返回值时就不必要重新执行函数,加快执行速度。