Loading... 大家好,我是闲欢,你们的老相识呀! 海象可谓是最大的哺乳动物了,有人称它是北半球的“土著”居民。它圆头,短而阔的嘴巴,粗大的鼻子,上犬齿形成长达40厘米-90厘米的獠牙,每只4公斤以上。雄海象体长可达4米,重2吨。海象喜群居,数千头簇拥在一起。 海象两眼眯得像缺乏活力的老头子,它们爱睡懒觉,一生中大多时间是躺在冰上度过的,还能在水里睡觉,真是牛出天际。 作为996的卷农,我非常羡慕它们的生活,好想跟他们一样躺平。 好了,言归正传,咱们继续卷吧!今天给大家带来了一个以海象命名的运算符——海象运算符。 Python 海象运算符是在 PEP 572 中提出,并在 Python3.8 版本并入和发布。 海象运算符的英文原名叫 Assignment Expresions ,即 赋值表达式。海象表达式由一个 : 和 一个 = 组成,即 `:=` 。我们一般称作 walrus operator(海象运算符),因为它看起来就是一个海象旋转 90° 而成。作者还是很有想象力的,这都能联系起来! ### 语法 海象运算符的语法格式是: > (variable_name := expression) 这是一个新的赋值运算符,跟我们常见的 `=` 类似,一个变量名后面跟一个表达式。 ### 用法 #### 用于 if-else 条件表达式 常规写法: ```python a = 5 if a > 1: print('do sth!') ``` 升级写法: ```python if a := 5 > 1: print('do sth!') ``` #### 用于 while 循环 常规写法: ```python n = 3 while n: print('do sth!') n -= 1 ``` 升级写法: ```python n = 3 while (n := n - 1) + 1: print('do sth!') ``` 这里加1是因为执行输出前n就减1了。 #### 读取文件 常规写法: ```python fp = open("test.txt", "r") while True: line = fp.readline() if not line: break print(line.strip()) fp.close() ``` 升级写法: ```python fp = open("test.txt", "r") while line := fp.readline(): print(line.strip()) ``` 在合适的场景中使用海象运算符可以降低程序复杂性,简化代码,甚至可以提高程序的性能。 ### 不适用场景 虽然海象运算符好用,但也不是所有场景都能用,还是有它的局限性的。 #### 变量赋值 我们不能将 `=` 运算符与 `:=` 运算符一起使用,海象运算符只能是表达式的一部分: ```python a = 5 # Valid a := 5 # InValid empty_list = [] # Valid empty_list := [] # InValid ``` 如果你这样写,编辑器会直接提示错误。 #### 加减法 ```python a += 5 # Valid a :+=5 # Invalid ``` #### Lambda函数中的赋值表达式 ```python (lambda: a:= 5) # Invalid lambda: (a := 5) # Valid, but not useful (var := lambda: 5) # Valid ``` ### 争议 #### 关键字 海象运算符使用 `:=` 这个关键字,是大多数开发人员都不太喜欢的,这个关键字跟我们平时接触到的都不一样,创造者独辟蹊径。 我也不太喜欢这个,但是也尊重创造者的规则,毕竟人家给大家带来这么实用的运算符。 #### 运算符名称 一些开发人员认为“海象运算符”这个名称太抽象了,不能清晰地表达出这个运算符的含义,几乎百分之百的人第一次看到这个名称,不会想到它的功能。 欢哥以为,既然没有一套规定的命名方法,作者取个有意义的名字也无可厚非吧。 ### 总结 从此以后,我们的武器库中又多了一件常规武器,大家在打仗(卷别人)时,不要忘了使用,对程序的性能和代码简洁性都会有提升。 熟练使用之后,也许你就有时间睡懒觉晒太阳了! 最后修改:2022 年 08 月 10 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 0 如果觉得我的文章对你有用,请随意赞赏