首页 > 编程语言 >Python中的赋值表达式

Python中的赋值表达式

时间:2022-09-24 15:22:06浏览次数:43  
标签:count Python len students print 表达式 赋值

赋值表达式(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)

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

标签:count,Python,len,students,print,表达式,赋值
From: https://www.cnblogs.com/blueberry-mint/p/16725712.html

相关文章

  • python爬虫随机headers伪装fake_useragent
    python爬虫随机headers伪装fake_useragentfake_useragent库调用方法ua.random可以随机返回一个headers(User-Agent)fromfake_useragentimportUserAgent#下载:pip......
  • 让 Python 社区活跃起来的修复
    让Python社区活跃起来的修复在Python的整数字符串转换中发现的漏洞的“修复”一直是Python社区讨论的主题。Photoby阿图里·贾利on不飞溅如您所知,整数数据......
  • python安装库的时候产生'check_hostname requires server_hostname'解决方法
    pipinstallxxx的时候报错...   raiseValueError("check_hostnamerequiresserver_hostname")ValueError:check_hostnamerequiresserver_hostname换源#清华源pi......
  • Python解释器下载与安装
    Python解释器下载与安装一、Python解释器1.Python的发展方向web方向,自动化运维,自动化测试,自动化办公,网络爬虫,金融量化,人工智能,机器学习,数据分析2.Python解释器版本Pyt......
  • java正则表达式简单使用
    Stringemail="13072558368";email=email.replaceAll("(\\d{3})\\d{6}(\\d{2})","$1****$2");System.out.println("email="+email);email=130****68从第......
  • Python pandas Dataframe sort_values 无效
    一定要注意df=df.sort_values()这个函数不是原地改变数据的同时也要主注意,在文档里虽然是这么写的,但是jupyter环境打印的是返回值......
  • 使用 Python 3 开发聊天机器人
    使用Python3开发聊天机器人我最近登陆了一个小项目,使用Python3开发了一个在Telegram平台上使用的聊天机器人。您可以查看机器人帐户@https://t.me/AI_12_Bot.......
  • windows平台下sublime配置python开发环境
    目录1,下载与安装2,包管理的安装3,sublime软件环境配置3,编译&运行1,下载与安装1.下载(官网http://www.sublimetext.com/download)并安装即可。2,包管理的安装1.将安装后的b......
  • 有效地对 Python 模块导入进行排序
    有效地对Python模块导入进行排序在本文中,我们将了解如何使用isort库来自动安排Python模块的导入。随着Python项目的扩展,您开始拥有越来越多的文件,每个文件都包......
  • 大量的 Python 阅读
    Pythonlogobywww.python.org,GPL,via维基共享资源大量的Python阅读来自ThePragmaticProgrammers的Python内容https://pragprog.com/newsletter/Pyt......