Python 语法精炼6
海象运算符
海象运算符是指 :=,在 Python 3.8 中首次引入。
它的正式名称是 赋值表达式(Assignment Expression)。
这个符号之所以被称为“海象运算符”,是因为它看起来像一个海象的眼睛和獠牙::=
基本作用
它的作用是:
在表达式内部进行赋值操作(即“边计算边赋值”)。
也就是说,你可以在一个表达式中给变量赋值,而不用单独写一行。
使用普通赋值
1 | n = len(data) |
使用海象运算符
1 | if (n := len(data)) > 10: |
n := len(data) 会先计算 len(data),将结果赋给 n,然后返回这个值用于比较。
应用场景
在条件语句中减少重复计算
1 | if (line := input("请输入: ")) != "exit": |
这样避免了写两次 input()。
在循环中简化读取逻辑
常见的例子是读取文件或流:
1 | while (line := file.readline().strip()): |
无需写成:
1 | line = file.readline().strip() |
列表推导式中避免重复计算
1 | nums = [n for x in data if (n := f(x)) > 0] |
相当于:
1 | nums = [] |
简化复杂表达式逻辑
1 | if (match := re.search(r"\d+", text)): |
注意事项
-
不能用于全局作用域的简单赋值:
1
2# ❌ 不推荐
x := 10 # SyntaxError必须出现在表达式内部,比如
if、while、for、return等语句里。 -
不要滥用:
虽然可以写得更短,但如果让代码难读,就失去了意义。✅ 好的用法:
1
2while (chunk := file.read(1024)):
process(chunk)❌ 不好的用法:
1
if (a := (b := func()) + (c := another())) > 10: ...
这种写法让人费解。
与“普通赋值”对比
| 特性 | 普通赋值 = |
海象运算符 := |
|---|---|---|
| 位置 | 独立语句 | 表达式中使用 |
| 返回值 | 无返回值 | 返回被赋的值 |
| 版本 | 所有版本 | Python ≥ 3.8 |
| 用途 | 普通赋值 | 边赋值边使用 |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Telason!
