首页 > 编程语言 >Python - PEP572: 海象运算符

Python - PEP572: 海象运算符

时间:2024-04-15 21:22:05浏览次数:28  
标签:海象 Python PEP572 运算符 pattern line data match

海象运算符

  • 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,运算符,pattern,line,data,match
From: https://www.cnblogs.com/poloyy/p/18136934

相关文章

  • Python调用微信OCR识别文字和坐标
    原理在看雪看到一篇文章:逆向调用QQ截图NT与WeChatOCR-软件逆向。里面说了怎么调用微信和QQ本地的OCR模型,还有很详细的分析过程。我稍微看了下文章,多的也看不懂。大概流程是使用mmmojo.dll这个dll来与WeChatOCR.exe做通信的,也是用它来启动和关闭WeChatOCR.exe进程的。所以关键只......
  • Python列表推导式
    一、列表推导列表推导式又称推导列表。列表推导式是以列表为载体,以推导的方式将数据生成并放在列表中。推导即规则,它支持for循环和筛选模式(if判断模式)。设定一个既定规则在列表中进行数据生成,列表推导式比传统方法更为简洁,代价是放弃一部分的可读性。二、如何声明列表推导式最......
  • python命令行工具:fire
    fire 是一个由Google开源的Python库,它能自动将Python代码转换成命令行接口(CommandLineInterface,CLI)。fire 库极大地简化了从Python函数或类生成命令行工具的过程。特性易用性:fire 是为了简化命令行工具的创建而设计的,它可以自动从任何Python对象生成命令行接口......
  • python--文件操作指南
    '''1.什么是文件:文件是操作系统给用户/应用程序操作硬盘的一种虚拟的概念/接口用户/应用程序操作系统(文件)计算机硬件(硬盘)2.为何要用文件用户/应用程序可以通过文件将数据永久保存的硬盘中,即操作文件就是操作硬盘用户/应用程序直接操作的是文件,对文件进行的所有的操作......
  • python3 pandas模块import报错 ModuleNotFoundError: No module named '_bz2'
    前言全局说明python3pandas模块import报错ModuleNotFoundError:Nomodulenamed'_bz2'一、环境ubuntu18.04Python3.8.17二、报错内容>>>importpandasTraceback(mostrecentcalllast): File"<stdin>",line1,in<module> F......
  • hash()函数在python2和python3的区别
    在Python3中,对于字符串类型的对象,hash()函数会根据当前进程的种子值计算哈希值。这个种子值在每次Python进程启动时都会随机生成。因此,即使是相同的字符串,在不同的Python进程中调用hash()函数会得到不同的哈希值。这种设计的目的是为了增加哈希表的随机性,从而提高安全性......
  • Mac python 多版本安装、删除、切换
    brewinstallpyenv版本验证pyenv-v 二查看所有的Python版本pyenvversions *指向的是当前所使用的版本,system是系统安装的python三查看所有可以安装的python版本pyenvinstall--list 截图部分四安装指定版本pyenvinstall3.8.9 五......
  • 鸿蒙开发TypeScript语言:【运算符】
    运算符用于执行程序代码运算,会针对一个以上操作数项目来进行运算。考虑以下计算:7+5=12以上实例中7、5和12是操作数。运算符 + 用于加值。运算符 = 用于赋值。TypeScript主要包含以下几种运算:算术运算符逻辑运算符关系运算符按位运算符赋值运算符三元/......
  • Python对Sql Server数据库增删改查
    Python对SqlServer数据库增删改查#如果电脑上没有安装mssql模块,则要安装mssql模块 安装模块的执行命令为 pip install pymssqlimport pymssql def ExecuteNonQuery(sqlStr,paras):    try:        connect = pymssql.connect(server='192.168.1.23:1......
  • python-函数以及函数的返回值
    '''函数:把具有独立功能的代码块组合成一个个小模块作用:提高代码的效率,实现代码重复---流程标准化#可以在不同的地方多次调用,想要使用几次就使用几次,更加灵活,只需要调用,不需要重新定义'''#def函数名():#函数的定义#函数名需要复合标志符的命名规范(必须是字母,下划线,数......