【Python 语法糖小火锅 · 第 3 涮】
一、糖味一句话
把 if/else
压成一行,是三元表达式;
把赋值塞进判断里,是海象 :=
;
用 or
/and
做兜底,是短路魔法。
三味同锅,鲜到掉眉。
二、1 行示例 3 连发
# ① 三元:真值 if 条件 else 假值
status = 200
msg = "ok" if status < 400 else "error"# ② 海象:边判断边赋值
if (n := len(data)) > 1000:print(f"大数据,{n} 条")# ③ 短路:or 给默认值
port = int(os.getenv("PORT") or 8000)
三、真实场景:CLI 参数 3 行变 1 行
需求:取用户输入的整数,没给就用 42,且要打印最终值。
import sys
count = int(sys.argv[1]) if len(sys.argv) > 1 else 42
print(f"Running {count} times")
再升级:
count = int((arg := sys.argv[1] if len(sys.argv) > 1 else None) or 42)
print(f"Running {count} (input was {arg})")
四、防踩坑小贴士
- 三元表达式优先级低,记得加括号:
x + a if cond else b
≠(x + a) if cond else b
- 海象运算符必须加括号才能用于顶级表达式,否则 SyntaxError。
- 短路只适用于「真/假」判断,别拿复杂表达式放左边,可读性会哭。
记忆口令 :“三元挑真假,海象边算边拿,短路兜底一句话。”