Python赋值表达式(海象操作符)

发布时间 2023-04-23 15:02:46作者: Circle_Wang

  Python3.8之后,编译器更新了一种新特性——赋值表达式。赋值表达式在很多情况下可以减少代码的重复,赋值表达式就是将计算后变量的值当成整个表达式的值。

  我们直接来看例子。

count = 10
if count < 4:
    print("逻辑一")
else:
    print("逻辑二")

  上述代码的情况我们会经常碰到。我们需要定义一个变量(或者给一个变量赋值),并根据这个变量赋值的结果来进行不同逻辑的处理,但这个变量可能就只会出现在这个逻辑处理中,并不会在以后再用到,因此这个count变量其实并不值得被单独命名,因此我们可以引入赋值表达式解决这个问题,下面是改进的代码:

if (count := 10) < 4:
    print("逻辑一")
else:
    print("逻辑二")

  赋值表达式会将 " := "右边的值赋给左边的变量,并且将这个变量最后得到的值视为表达式的值,上述代码第一行含义是,将10赋值给count这个变量,并且括号的值就是10,那么 if 比较的就是10 < 4 。这样我们减少了代码,也让代码含义更加明确,并且也降低了count在整个代码的重要程度(虽然这个count仍然作为变量能被访问)。

  这个赋值表达式还可以帮助我们实现类似do-while循环。由于python中并没有do-while循环结构,因此我们常常需要先设定初始值再进入while循环,比如下面的代码:

b = [1,2,3,4,0,-1]
flag = b[0]
while flag >= 0:
    print(b.pop(0))
    flag = b[0]

  由于while循环的终止条件需要依赖于flag变量,因为我们必须要对flag变量先进行赋值,并且在while循环中再次对flag进行赋值(此处其实是展现一个例子,当然有其他的方式更简单的实现),如果我们使用海象操作符,可以得到下面这个改进:

b = [1,2,3,4,0,-1]

while (flag := b[0]) >= 0:
    print(b.pop(0))

  这样就实现了类似的do-while循环的操作了,这样既能够更清楚的表达代码含义,也能使得代码更加简洁。