海象运算符

  • 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))

使用海象运算符之后,分别做了四件事

  1. 对表达式pattern.match(data)求值
  2. 把第一步的求值结果赋值给 match 变量
  3. 把 match 变量作为 if 的 条件,判断它的值是不是 None
  4. 而 match 变量可以在 if 的作用域范围内继续使用 print(match.group(0)

文件读取的例子

未使用海象运算符

while 1:
line = fp.readline()
if not line:
break
print(line)

使用海象运算符优化代码

while (line := fp.readline()):
print(line)

仍然做了四件事:

  1. 对表达式fp.readline()求值
  2. 求值结果赋值给 line
  3. 对 line 进行 while 循环的条件判断,如果 None 就退出循环
  4. 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: 海象运算符的更多相关文章

  1. 很多人不知道的Python 炫技操作:海象运算符的三种用法

    Python 版本发展非常快,如今最新的版本已经是 Pyhton 3.9,即便如此,有很多人甚至还停留在 3.6 或者 3.7,连 3.8 还没用上. 很多 Python 3.8 的特性还没来得及了解 ...

  2. python推导式与海象运算符

    背景:介绍两种python用于语句优化的用法 一.推导式 1.推导式简介: Python 推导式是一种独特的数据处理方式,可以从一个数据序列构建另一个新的数据序列的结构体. 支持:列表(list).元 ...

  3. python基础之运算符

    算术运算符 运算符 描述 实例 + 加 - 两个对象相加 a + b 输出结果 31 - 减 - 得到负数或是一个数减去另一个数 a - b 输出结果 -11 * 乘 - 两个数相乘或是返回一个被重复 ...

  4. Python基础-Python的三元运算符和lambda表达式

    1. Python的三元表达式: 现在大部分高级语言都支持 “?”这个三元运算符,它对应的表达式如下:condition ? value if true:value if else 但是 Python ...

  5. 【Python】 解析Python中的运算符

    Python中的运算符相比较于传统的C/C++差别不是很大,主要是一些个别的运算符上的差别.包括:算术.比较.赋值.位.逻辑.成员.身份等.它们的优先级: 符号 说明 ** 指数(最高优先级) ~,+ ...

  6. Python表达式与运算符

    表达式与运算符 Python语言支持以下类型的运算符: 算术运算符 比较(关系)运算符 赋值运算符 逻辑运算符 位运算符 成员运算符 身份运算符 运算符优先级 算术运算符 运算符 描述 + 加 - 两 ...

  7. 【转】Python中的运算符

    [转]Python中的运算符 说完常用的数据类型,再来说下运算符.运算符用于将各种类型的数据进行运算,让静态的数据跑起来. 编程语言中的运算大致分为以下几个大类: 算术运算, 用于加减乘除等数学运算 ...

  8. python中的运算符及表达式及常用内置函数

    知识内容: 1.运算符与表达式 2.for\while初步了解 3.常用内置函数 一.运算符与表达式 python与其他语言一样支持大多数算数运算符.关系运算符.逻辑运算符以及位运算符,并且有和大多数 ...

  9. Python中的运算符与表达式

    你所编写的大多数语句(逻辑行)都包含了表达式(Expressions).一个表达式的简单例子便是 2+3.表达式可以拆分成运算符(Operators)与操作数(Operands).运算符(Operat ...

  10. python入门5 运算符

    python运算符: 1 算术运算符 加减乘除 取余 求商 求幂等 2 比较运算符==   !=  >  >=  < <= 3 逻辑运算符 and  not  or 4 赋值运 ...

随机推荐

  1. 从华为WeAutomate数字机器人论坛,看政企领域的“政务新智理”

    从华为WeAutomate数字机器人论坛,看政企领域的"政务新智理" 从政务治理到"政务新智理",华为WeAutomate在政务领域的思考与实践 华为WeAut ...

  2. dos-基础用法

    DOS(磁盘操作系统)是一个早期的基于命令行的操作系统,尽管现代操作系统已经发展为图形用户界面(GUI),但是了解和掌握一些基本的DOS命令仍然非常有用,尤其是在处理批处理脚本.网络管理或者在没有图形 ...

  3. TLS原理与实践(二)

    主页 个人微信公众号:密码应用技术实战 个人博客园首页:https://www.cnblogs.com/informatics/ 引言 在上一篇博客中,我们通过<一文读懂TLS1.2协议](ht ...

  4. redisson分布式锁lua脚本翻译

    1.获取锁 lock入参:keys[1]:自定义锁的key  RLock lock = redissonClient.getLock(lockKey);argv[1]=锁的租期,默认30s  argv ...

  5. springboot+kaptcha生成数学运算验证码和字符验证码

    使用以下代码只需要复制粘贴,修改一处文本生成器路径即可,文中有交代. 1.添加kaptcha依赖 <dependency> <groupId>com.github.penggl ...

  6. 正则表达式 <h2>kk</h2> 替换为 <h2 id="kk">kk</h2>

    `<h2>kk</h2><h2>k333k</h2>`.replace(/\<h2>(.*?)<\/h2>/g, `<h2 ...

  7. 【深度学习】神经网络正则化方法之Dropout

    前言 正则化是一种广泛用于机器学习和深度学习的手段,它的目的就是阻碍模型过度学习(过拟合),从而提升算法的泛化能力. Dropout 是一种常见的缓解过拟合的方法.接下来,本文将从原理和实践来介绍Dr ...

  8. TLV320ADC3101这颗立体声 ADC芯片分析体验及总结

    一 需求分析 音频ADC采集,顾名思义,就是采集语音信号的ADC.随着基于音视频穿戴式设备的广泛应用,音频ADC使用十分广泛.TI的这颗ADC芯片凭借着先发优势,在很多领域已经有广泛的应用了. 作为一 ...

  9. Qt HTTP网络相关GET,POST(HTTP 模拟POST 表单(multipartform)最简单和正式的方法)

    PS:要转载请注明出处,本人版权所有. PS: 这个只是基于<我自己>的理解, 如果和你的原则及想法相冲突,请谅解,勿喷. 前置说明   本文作为本人csdn blog的主站的备份.(Bl ...

  10. 全国标杆!3DCAT实时云渲染助力深圳移动5G+智慧校园建设

    2023年2月27日,中国移动在陕西西安召开全国教育行业全年工作部署暨电子学生证专项调度会,来自全国各地的移动分公司.专家.合作伙伴等参加了会议.瑞云科技旗下3DCAT实时渲染云作为中国移动的重要合作 ...