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

Python中的赋值表达式

时间:2023-11-14 17:00:57浏览次数:25  
标签: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
#学习中遇到问题没人解答?小编创建了一个Python学习交流群:711312441
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/python1111/p/17832022.html

相关文章

  • 【Python&图像超分】Real-ESRGAN图像超分模型(超分辨率重建)详细安装和使用教程
    ​1前言        图像超分是一种图像处理技术,旨在提高图像的分辨率,使其具有更高的清晰度和细节。这一技术通常用于图像重建、图像恢复、图像增强等领域,可以帮助我们更好地理解和利用图像信息。图像超分技术可以通过多种方法实现,包括插值算法、深度学习等。其中,深度学习......
  • 关于两个实体类之间相同字段的赋值
    1.可以使用以下方法:BeanUtils.copyProperties(one,two)2.相关依赖:<dependency><groupId>commons-beanutils</groupId><artifactId>commons-beanutils</artifactId><version>number</version><!--替换为正确的版本号-->可以是:1.9......
  • Python基础之map()函数
    map()函数会根据提供的对指定的可迭代对象的每个元素进行运算,并将返回运算结果的迭代器。先去将几个例子,这样比较通俗易懂。eg1:输入数据型a=map(int,input().split())输入:1213结果为:分析:map(int,input().split())将输入的值(input.split()的东西也叫做可迭代对象)通过空格......
  • centos8 python3 安装达梦驱动 dmpython
    方案一全新安装:1.https://eco.dameng.com/download/下载dm8_20231011_x86_rh6_64.iso到/aaa目录2.创建用户所在的组groupadddinstall3.创建用户useradd-gdinstall-m-d/home/dmdba-s/bin/bashdmdba4.修改用户密码passwddmdba5.修改文件打开最大数vi/etc/sec......
  • 用python计算圆周率PI
     描述用python计算圆周率PI‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‬‪‬......
  • python datetime对象转成字符串类型str
    ptrada=dbutil.select(f"selecttrade_datefrom...")print(type(ptrada),ptrada)    # <class'list'>[(datetime.datetime(2023,8,1,0,0),)]一般从数据库中取到的日期都是datetime对象数据结构pretra=ptrada[0][0]    print(type(pretra ),pr......
  • Python字符的编码encode和解码decode
    相关阅读:字符集(CharacterSet)和编码(Encoding)的历史演化 Python字符的编码encode和解码decode进行编码str.encode("编码") 进行解码bytes.decode("编码")  s="周杰伦"bs1=s.encode("gbk")#b'xxxx'bytes类型bs2=s.encode("utf-8"......
  • 守护 C 盘,Python 相关库设置
    前言    pip安装依赖和conda创建环境有多方便,那C盘就塞得就有多满。以前我不管使用什么工具,最多就设置个安装位置,其他都是默认。直到最近C盘飙红了,我去盘符里的AppData里一看,pip的缓存和conda以前创建的虚拟环境都是几个G以上。所以我决定整顿C盘,对所有......
  • Python爬虫程序网络请求及内容解析
    以下是一个简单的Python爬虫程序,用于爬取商户的内容。这个程序使用了requests和BeautifulSoup库来进行网络请求和内容解析。importrequestsfrombs4importBeautifulSoup#爬虫爬虫IP信息proxy_host='duoip'proxy_port='8000'#请求URLurl='目标网站'#创建一个r......
  • requests 在 Python 3.2 中使用 OAuth 导入失败的问题与解决方案
    问题背景在Python3.2中,尝试使用Request的OAuth支持时,遇到了OAuth导入失败的问题。以下代码:importrequestsfromrequests.authimportOAuth1url='https://api.twitter.com/1/account/settings.json'queryoauth=OAuth1('client_key','client_secret',......