海象运算符 := 与 f-string 高级用法
就讲 Python 3.8 的海象运算符和 f-string,重点说调试和格式化的技巧。
- 就讲海象运算符的用法和适用场景,用:=写。
- 学会 f-string 的 = 调试语法
- 了解 f-string 的格式说明符
- 避免海象运算符的常见陷阱
海象运算符 :=
:=(walrus operator) 是 Python 3.8 引入的,它在表达式中赋值并返回值。名字来自它看起来像海象的眼睛和獠牙。
if 条件里用海象运算符,得加括号:if (n := len(x)) > 3:。不加括号会报语法错误,因为 := 的优先级比比较运算符低。
while 循环中读取数据
海象运算符最经典的场景是 while 循环中逐行读取:
f-string 调试语法 =
Python 3.8+ 支持在 f-string 中用 = 同时输出变量名和值,调试时非常方便:
f-string 格式说明符
海象运算符虽然简洁,但不要滥用。如果赋值逻辑复杂,或者一行太长影响可读性,就老老实实分两行写。代码是写给人看的,简洁不等于晦涩。Google 代码规范建议:只在能明显减少重复代码时使用。
小测验
海象运算符 := 的作用是?
x = [1,2,3,4]
print([y for i in x if (y := i*2) > 4])资深工程师加餐
底层原理 · 大厂视角 · 工程经验,点卡片展开
list 底层是一段连续的指针数组,容量不够时整体扩容(CPython 约按 1.125 倍)。因此按下标取元素是 O(1),末尾 append 均摊 O(1),但在头部 insert(0,…) 或 pop(0) 要搬动全部元素、是 O(n)。dict/set 基于哈希表,平均查找 O(1) 但更耗内存。选对数据结构,往往比抠语法更影响性能。
挑战任务
数据处理管道
用海象运算符优化一段数据处理代码:读取输入、转换、过滤,一步到位。
课后作业
日志过滤器
用海象运算符写日志过滤函数:读日志行,要是里面有 ERROR,就提取返回错误信息。