Python - PEP572: 海象运算符
海象运算符
- PEP572 的标题是「Assignment Expressions」,也就是「赋值表达式」,也叫做「命名表达式」
- 不过它现在被广泛的别名是「海象运算符」(The Walrus Operator),因为
:=很像海象
赋值中间变量
未使用海象运算符
pattern = re.compile('s')
data = 'ss'
match = pattern.match(data)
if match:
print(match.group(0))
使用海象运算符优化代码
pattern = re.compile('s')
data = 'ss'
if match := pattern.match(data):
print(match.group(0))
使用海象运算符之后,分别做了四件事
- 对表达式
pattern.match(data)求值 - 把第一步的求值结果赋值给 match 变量
- 把 match 变量作为 if 的 条件,判断它的值是不是 None
- 而 match 变量可以在 if 的作用域范围内继续使用
print(match.group(0)
文件读取的例子
未使用海象运算符
while 1:
line = fp.readline()
if not line:
break
print(line)
使用海象运算符优化代码
while (line := fp.readline()):
print(line)
仍然做了四件事:
- 对表达式
fp.readline()求值 - 求值结果赋值给 line
- 对 line 进行 while 循环的条件判断,如果 None 就退出循环
- line 变量可以在 while 循环体内使用
这个就真的简化了很多的代码
简化列表解析
常见使用添加数据到列表的写法
results = []
for x in data:
result = f(x)
if result:
results.append(result)
假设想使用列表生成式来解决呢?
results = [
f(x) for x in data
if f(x)
]
这样是错误的,为什么?因为会执行两次f(x),不符合实际需求
可以使用海象表达式来优化
results = [
y for x in data
if (y := f(x))
]
官方例子
stuff = [[y := f(x), x/y] for x in range(5)]
因为每一项包含了 y,以及要用 y 才能获得结果 x/y,所以 赋值给中间变量是海象运算符的关键
一段迷惑的使用海象操作符的代码
Python - PEP572: 海象运算符的更多相关文章
- 很多人不知道的Python 炫技操作:海象运算符的三种用法
Python 版本发展非常快,如今最新的版本已经是 Pyhton 3.9,即便如此,有很多人甚至还停留在 3.6 或者 3.7,连 3.8 还没用上. 很多 Python 3.8 的特性还没来得及了解 ...
- python推导式与海象运算符
背景:介绍两种python用于语句优化的用法 一.推导式 1.推导式简介: Python 推导式是一种独特的数据处理方式,可以从一个数据序列构建另一个新的数据序列的结构体. 支持:列表(list).元 ...
- python基础之运算符
算术运算符 运算符 描述 实例 + 加 - 两个对象相加 a + b 输出结果 31 - 减 - 得到负数或是一个数减去另一个数 a - b 输出结果 -11 * 乘 - 两个数相乘或是返回一个被重复 ...
- Python基础-Python的三元运算符和lambda表达式
1. Python的三元表达式: 现在大部分高级语言都支持 “?”这个三元运算符,它对应的表达式如下:condition ? value if true:value if else 但是 Python ...
- 【Python】 解析Python中的运算符
Python中的运算符相比较于传统的C/C++差别不是很大,主要是一些个别的运算符上的差别.包括:算术.比较.赋值.位.逻辑.成员.身份等.它们的优先级: 符号 说明 ** 指数(最高优先级) ~,+ ...
- Python表达式与运算符
表达式与运算符 Python语言支持以下类型的运算符: 算术运算符 比较(关系)运算符 赋值运算符 逻辑运算符 位运算符 成员运算符 身份运算符 运算符优先级 算术运算符 运算符 描述 + 加 - 两 ...
- 【转】Python中的运算符
[转]Python中的运算符 说完常用的数据类型,再来说下运算符.运算符用于将各种类型的数据进行运算,让静态的数据跑起来. 编程语言中的运算大致分为以下几个大类: 算术运算, 用于加减乘除等数学运算 ...
- python中的运算符及表达式及常用内置函数
知识内容: 1.运算符与表达式 2.for\while初步了解 3.常用内置函数 一.运算符与表达式 python与其他语言一样支持大多数算数运算符.关系运算符.逻辑运算符以及位运算符,并且有和大多数 ...
- Python中的运算符与表达式
你所编写的大多数语句(逻辑行)都包含了表达式(Expressions).一个表达式的简单例子便是 2+3.表达式可以拆分成运算符(Operators)与操作数(Operands).运算符(Operat ...
- python入门5 运算符
python运算符: 1 算术运算符 加减乘除 取余 求商 求幂等 2 比较运算符== != > >= < <= 3 逻辑运算符 and not or 4 赋值运 ...
随机推荐
- 深入浅出Java多线程(十一):AQS
引言 大家好,我是你们的老伙计秀才!今天带来的是[深入浅出Java多线程]系列的第十一篇内容:AQS(AbstractQueuedSynchronizer).大家觉得有用请点赞,喜欢请关注!秀才在此谢 ...
- aardio调用c语言dll动态库传结构体详细教程
开发日记3.11 此篇用于记录发那科数控机床(Fanuc CNC)采集程序开发中,C语言写底层然后用aardio写窗口调用dll的摸索出来的类型对应和踩坑整理. 由于发那科提供的开发套件是C语言的,所 ...
- vscode 文件上传快捷键 shift+alt+s (ftp专用)插件用的 ftp-sync
vscode 文件上传快捷键 shift+alt+s (ftp专用)插件用的 ftp-sync { "key": "shift+alt+s", "co ...
- masscode.io snippets 和 vscode 联动 代码片段
https://masscode.io/ 软件作用 代码片段 vscode 可以联动使用 下载不行 慢的话, 下载 fastgithub,打开后再下载
- day03-1-查看账单&结账功能
满汉楼03 4.功能实现05 4.8查看账单功能 按照之间搭建起来的框架,在BillService编写方法 4.8.1代码实现 1.修改Bill类 重写Bill类中的toString方法 @Overr ...
- 流媒体通信中RTP/RTCP在项目中的应用
一 概述: 本文档描述RTC通信中RTP/RTCP的应用以及当前项目中的使用策略. 二 RTP/RTCP协议简介 2.1 协议标准 RTP 由 IETF(http://www.ietf.org/)定义 ...
- Bitmap优化详谈
目录介绍 01.如何计算Bitmap占用内存 1.1 如何计算占用内存 1.2 上面方法计算内存对吗 1.3 一个像素占用多大内存 02.Bitmap常见四种颜色格式 2.1 什么是bitmap 2. ...
- 自己动手做一个批量doc转换为docx文件的小工具
前言 最近遇到了一个需求,就是要把大量的doc格式文件转换为docx文件,因此就动手做了一个批量转换的小工具. 背景 doc文件是什么? "doc" 文件是一种常见的文件格式,通常 ...
- 记录--巧用 overflow-scroll 实现丝滑轮播图
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 前言: 近期我在项目中就接到了一个完成轮播图组件的需求.最开始我也像大家一样,直接选择使用了知名的开源项目 "Swiper&qu ...
- drools执行指定的规则
目录 1.背景 2.方案 2.1 通过AgendaFilter来实现 2.2 通过entry-point来实现 3.实现 3.1 需求 3.2 drl 文件编写 3.3 部分java代码 3.4 运行 ...