Python 3.8中的新特性——海象运算符

海象运算符

海象运算符的英文原名叫 Assignment Expresions ,即赋值表达式。是Python 3.8新增的语法 :=,在 PEP 572 中提出。它的作用是在表达式内部为变量赋值

实例

一般写法

1
2
3
a = 15
if a > 10:
print('hello, walrus operator!')

改进写法

1
2
if a := 15 > 10:
print('hello, walrus operator!')

可以在Expression的内部直接为变量赋值,可以简化代码和提升运算效率。

用于列表推导式

1
2
3
4
5
nums = [16, 36, 49, 64]
def f(x):
print('运行了函数f(x)1次。')
return x ** 0.5
print([f(i) for i in nums if f(i) > 5])

输出结果:

1
2
3
4
5
6
7
8
运行了函数f(x)1次。
运行了函数f(x)1次。
运行了函数f(x)1次。
运行了函数f(x)1次。
运行了函数f(x)1次。
运行了函数f(x)1次。
运行了函数f(x)1次。
[6.0, 7.0, 8.0]

一共就 4 个数字,但是函数被执行了 7 次。这是因为有三个数字满足列表推导式的条件,需要再额外计算 3次。当程序数据巨大的时候,这将浪费大量性能。

改进:

1
2
3
4
5
nums = [16, 36, 49, 64]
def f(x):
print('运行了函数f(x)1次。')
return x ** 0.5
print([n for i in nums if (n := f(i)) > 5])
1
2
3
4
5
运行了函数f(x)1次。
运行了函数f(x)1次。
运行了函数f(x)1次。
运行了函数f(x)1次。
[6.0, 7.0, 8.0]

函数只执行了 4 次,函数执行结果被 n 储存,不需要额外计算。性能优于不使用 := 的。


Python 3.8中的新特性——海象运算符
https://brockshuai.github.io/2023/01/09/海象运算符/
作者
神仙魚
发布于
2023年1月9日
许可协议