背景:python 3.8正式版最近更新了,其中PEP572中的海象运算符获得正式python版本的支持.我看了官网的文档还有其它大神写的这个东西,我感觉在将来的python语句中是非常实用的一个东西,所以写下这篇博客来介绍、介绍,同时也是自己学习新版特性,尽管我司生产环境还停留在 3.6,但并不影响我尝尝鲜.

ps:这是3.8 新特性网址:https://docs.python.org/3/whatsnew/3.8.html

官网介绍:Assignment expressions(赋值表达式)

There is new syntax := that assigns values to variables as part of a larger expression. It is affectionately known as “the walrus operator” due to its resemblance to the eyes and tusks of a walrus.
中译过来就是:咱们这新开发了一种语法,它是一个强大的表达式,会把表达式的一部分赋值给变量,因为很像海象的眼睛和象牙,所以成为海象操纵者(掌控雷电的感觉(~-^)。听起来有点懵,可能是我的翻译水准不够把。

描述之后呢,官网给了一些例子:

1

if (n := len(a)) > 10:print(f"List is too long ({n} elements, expected <= 10)")
在这个例子里面,文档强调通过使用海象表达式,避免len()方法运行两次,从而提高了运行速度.
假如在没有海象运算符的时候,我们会怎么来写这段代码呢?来试一试:
if len(a) > 10:print(f"List is to long({len(a)} elements, expected <= 10)")
或者这样写,避免使用两次len方法,却又多了一次赋值给中间变量的步骤.
n = len(a)
if n > 10:print(f"List is to long({n} elements, expected <= 10)")
我觉得一个好处就在于这里,为我们省去了一个赋值中间变量的步骤.

2

接下来,文档又给出了第二个例子,关于海象运算符在正则中的应用
discount = 0.0
if (mo := re.search(r'(\d+)% discount', advertisement)):discount = float(mo.group(1)) / 100.0
背景应该是这样的,代码想从一段advertisement的文本中,拿到打折的百分比,然后通过除法得到百分比数. 在这里面,海象运算符干了些什么呢?我们来看哈,虽然正则匹配的语句只用了一次,但它却在两个 地方起了作用,一次是检测匹配是否发生,也就是if控制语句,还有一次是提取分子.同样用python3.8之前的语句来写这个语句:
discount = 0.0
mo = re.search(r'(\d+)% discount', advertisement)
if mo:discount = float(mo.group(1)) / 100.0
和上面的例子相似,海象运算符替我们省去了中间赋值的步骤,让代码更加整洁了.

3

接下来,文档又给了两个例子,首先是一个 while循环控制,还是省去了赋值的步骤:
# Loop over fixed length blocks
while (block := f.read(256)) != '':process(block)
背景:代码读取一个文件,当不为空执行操作,同样看没有海象运算符,我们会怎么写:
while 1:block = f.read(256)if block != '':process(block)else:        break
同样是 赋值一气呵成,这让我认为海象运算符的作用在于,把计算语句的结果赋值给变量,然后,变量可以在代码块里执行运用.

4

接下来是最后一个例子:
[clean_name.title() for name in names if (clean_name := normalize('NFC', name)) in allowed_names]
背景是一个列表推导式里面,需要计算得到符合过滤条件的值,这个可以稍稍简写下,会显得更加通透:
[o.title() for i in names if o:=f(i) in allowed_names]
# 在这里我把: clean_name normalize('NFC', name) 比做了一个方法更简洁一点:
[y for x in names if (y := f(x))]
同样我们最简洁的方式来改写这段代码:
[f(x) for x in names if f(x)]
可以看到f(x)执行了两次,故此可以看到海象运算符的用法了吧,即简化流程,提高运算速度.

PS:最近在学习Go,Go里面就有这个东西,它是用来简化赋值语句的.

在Go里面,你需要用到 var 来进行赋值,如果你不想用var的话,就可以用 :=来进行赋值。
btw:学Go还真是有点蛋疼.

Python :=海象运算符最简单的解释相关推荐

  1. Python海象运算符的使用

    1.在判断条件下允许操作.在一定程度上简化了代码,但降低了可读性. i = len((l := [1, 2, 3])) # 先对l进行赋值,在对i赋值 while (i := i - 1) >= ...

  2. Python 海象运算符,威力无穷!

    文 | 闲欢 来源:Python 技术「ID: pythonall」 大家好,我是闲欢,你们的老相识呀! 海象可谓是最大的哺乳动物了,有人称它是北半球的"土著"居民.它圆头,短而阔 ...

  3. python海象运算符

    简介 Python 海象运算符是在 PEP 572 中提出,并在 Python3.8 版本并入发布. 海象运算符的英文原名叫 Assignment Expresions ,即 赋值表达式.海象表达式由 ...

  4. python 海象运算符,Python3.8新特性-- 海象操作符

    "理论联系实惠,密切联系领导,表扬和自我表扬"--我就是老司机,曾经写文章教各位怎么打拼职场的老司机. 不记得没关系,只需要知道:有这么一位老司机, 穿上西装带大家打拼职场! 操起 ...

  5. python海象运算符怎么用_python中的海象运算符

    海象运算符是在 PEP 572 被提出的,直到 3.8 版本合入发布. 它的英文原名叫 Assignment Expressions,翻译过来也就是 赋值表达式,不过现在大家更普遍地称之为海象运算符, ...

  6. python海象运算符_Python 中海象运算符的三种用法

    首发于微信公众号:<Python编程时光> 系列导读 Python 版本发展非常快,如今最新的版本已经是 Pyhton 3.9,即便如此,有很多人甚至还停留在 3.6 或者 3.7,连 3 ...

  7. python海象运算符怎么用_Python 炫技操作:海象运算符的三种用法

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

  8. python海象运算符_【译】Python3.8新语法:海象运算符

    作者:Brett Slatkin 翻译:老齐 与本文内容有关的图书:<跟老齐学Python:轻松入门>.<Python大学实用教程> Python3.8引入了一种叫做海象运算符 ...

  9. python海象运算符_浅析PEP572: 海象运算符

    现在已经是Python 3.8的最后一个alpha版本,接着就是本月底要发布的的3.8.0 beta 1了.按规定,3.8已经不会再添加(修改)功能了,之前非常有争议的PEP 572的实现已经算是很固 ...

最新文章

  1. 组装计算机的游戏,如何组装一台游戏电脑
  2. mac下安装apc并且使用
  3. python获取小时分钟
  4. php上传图片到非项目目录,前端页面的读取问题
  5. gerrit的Change-Id机制和hook机制
  6. linux php 守护进程,PHP程序员玩转Linux系列 使用supervisor实现守护进程
  7. 实用、酷炫的可视化,你用10小时,同事用10分钟,差距在哪?
  8. 李楠谈小米MIX Alpha:卖19999元还是不赚钱
  9. struct interface_GCTT | 接受 interface 参数,返回 struct 在 go 中意味着什么
  10. 数据库快照的工作方式
  11. ioc中最基本的JAVA技术_Spring IOC 知识点总结
  12. Tricks(四十七)—— 布尔矩阵(0-1矩阵)取反
  13. webpack资源的输入与输出
  14. Clickhouse分片集群性能测试
  15. PMP-5.项目范围管理-需求跟踪矩阵
  16. 堆栈平衡(子程序调用)
  17. Tableau 2018.2 安装与破解记录
  18. 酷比魔方iplay20_799元买国产“山寨板”是否值得?酷比魔方iPlay20 Pro评测
  19. Docker Compose network配置
  20. Stellarium Windows/Linux编译记录

热门文章

  1. 1.15 从0开始学习Unity游戏开发--游戏UI
  2. UVM学习笔记--TLM通信
  3. python to_csv追加数据解决表头重复
  4. 【环境配置】Turtlebot2 激光雷达+深度相机 GAZEBO仿真
  5. 使用jQuery实现学生期末成绩录入
  6. 大数据是个什么鬼啦?
  7. 南京大学计算机 史颖欢,离散数学-南京大学计算机科学与技术系.pdf
  8. 新生儿摄影调色效果lr预设
  9. OutLook中发送用户密码加密的小技巧
  10. 【LeetCode】121. 买入和卖出股票的最佳时间