Python中的赋值表达式

赋值表达式(assignment expression)是Python 3.8新引入的语法,它会用到海象操作符(walrus operator)。

这种写法可以解决某些持续已久的代码重复问题。a = b是一条普通的赋值语句,读作a equals b,而a := b则是赋值表达式,读作a walrus b。

这个符号为什么叫walrus呢?因为把:=顺时针旋转90º之后,冒号就是海象的一双眼睛,等号就是它的一对獠牙。这种表达式很有用,可以在普通的赋值语句无法应用的场合实现赋值,例如可以用在条件表达式的if语句里面。

赋值表达式的值,就是赋给海象操作符左侧那个标识符的值。

举个例子

students = ["小明", "小红", "小李", "小光"] if len(students) >= 3: print("学生人数超过3人,人数为{}".format(len(students))) else: print("学生人数不超过3人,人数为{}".format(len(students)))

上面例子中有三处用到了len(students),显然,这样会出现重复获取值的情况。

在Python中,一般的做法是,先定义一个变量count来存放len(students)的值,再使用该变量来进行之后的操作,如下:

students = ["小明", "小红", "小李", "小光"] count = len(students) if count >= 3: print("学生人数超过3人,人数为{}".format(count)) else: print("学生人数不超过3人,人数为{}".format(count))

然而,在实际开发中,我们定义的如上面例子中count的变量值有多个,而且逻辑语句也会相对复杂很多,有时候很难第一时间发现这些变量值在逻辑语句中的作用。Python引入赋值表达式正是为了解决这样的问题。

下面使用海象操作符来改写上面的例子

students = ["小明", "小红", "小李", "小光"] if (count := len(students)) >= 3: print("学生人数超过3人,人数为{}".format(count)) else: print("学生人数不超过3人,人数为{}".format(count))

新代码虽然只省了一行,但读起来却清晰很多,因为这种写法明确体现出count变量只与if块有关。

这个赋值表达式先把:=右边的值赋给左边的count变量,然后对自身求值,也就是把变量的值当成整个表达式的值。由于表达式紧跟着if,程序会根据它的值是否满足条件来决定该不该执行if块。

这种先赋值再判断的做法,正是海象操作符想要表达的意思。

同样,我们也可以在列表推导式中使用赋值表达式

students = ["小明", "小红", "小李", "小光"] count_list = [count := len(students), count ** 2, count ** 3] print(count_list)

在实际开发中,比较常用到的正则表达式也可以使用赋值表达式

import re desc = "name: Tony" if m := re.match("name: (.*)", desc): name = m.group(1) print(name)

总之,如果某个表达式或赋值操作多次出现在一组代码里面,那就可以考虑用赋值表达式把这段代码改得简单一些。


__EOF__

本文作者蓝莓薄荷
本文链接https://www.cnblogs.com/blueberry-mint/p/16725712.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   蓝莓薄荷  阅读(1006)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
点击右上角即可分享
微信分享提示