Python 3.8+ 海象运算符详解
Python 3.8 引入了一个备受期待的新特性——海象运算符(Walrus Operator),语法为 :=。它允许你在表达式内部直接给变量赋值,并且返回这个值。这不仅仅是语法糖,更是为了减少重复计算和简化嵌套逻辑而设计的利器。
1 基础概念
海象运算符的核心在于'边算边存'。在传统写法中,我们往往需要先赋值再判断,或者在判断前调用一次函数,而在海象运算符出现后,这两步可以合并。它的本质是赋值表达式,既完成了赋值动作,又产出了结果供后续使用。
2 基础用法
2.1 条件语句中的赋值
以前写 if 判断时,如果判断条件涉及复杂的函数调用,我们不得不先把它赋给临时变量。现在可以直接写在 if 里。
# 传统写法
data = fetch_data()
if data:
process(data)
# 海象运算符写法
if (data := fetch_data()):
process(data)
注意括号的使用,虽然优先级上 := 较低,但加上括号能让意图更清晰,也能避免一些潜在的歧义。
2.2 循环中的赋值
在处理流式数据或需要检查状态的场景下,海象运算符能极大简化 while 循环。
# 传统写法
line = file.readline()
while line:
process(line)
line = file.readline()
# 海象运算符写法
while (line := file.readline()):
process(line)
这样不仅减少了重复代码,还让循环的终止条件一目了然。
2.3 表达式内部复用
有时候我们需要在一个复杂的表达式中多次用到同一个子表达式的结果。
# 传统写法
result = calculate(x)
if result > 0 and result < 100:
print(result)
# 海象运算符写法
if (result := calculate(x)) > 0 and result < 100:
print(result)
3 进阶技巧
3.1 列表推导式中的过滤
在列表推导式中,我们可以利用它来过滤掉无效数据,同时保留处理后的值。
valid_items = [x for x in items if (processed := transform(x)) ]


