if...else 写三行?
三元表达式只要一行!
🤏
1️⃣ 基础语法:先背口诀 🧠
口诀:结果A if 条件 else 结果B
score = 82
level = '优秀' if score >= 80 else '良'
print(level) # 优秀
“口诀背完,头发不掉”📖🦲
2️⃣ 嵌套三元:套娃一时爽 🔥
# 把成绩分三档
level = ('优秀' if score >= 90 else
'良' if score >= 75 else
'加油')
⚠️ 注意:
- 最多嵌套两层,三层以上容易被打👊
- 加括号自动换行,PEP8 不找你麻烦✅
3️⃣ 与 lambda 合体:匿名函数也要秀 🕶️
f = lambda x: '偶数' if x % 2 == 0 else '奇数'
print(f(7)) # 奇数
4️⃣ 列表推导 + 三元:批量改造神器 🚀
nums = [7, 4, -3, 9]
# 负数变 0,其他平方
result = [x**2 if x > 0 else 0 for x in nums]
print(result) # [49, 16, 0, 81]
5️⃣ 字典三元:一键切换双模式 🎛️
debug = True
config = {'log': 'debug' if debug else 'warning', 'timeout': 5}
print(config) # {'log': 'debug', 'timeout': 5}
6️⃣ 容易踩的坑 ⚠️
| 坑点 | 错误示例 | 正确打开 |
|---|---|---|
忘写 else | a if x>0 ❌ | a if x>0 else b ✅ |
| 优先级懵逼 | 1 + x if x else 0 实际=(1+x) if x else 0 | 想先三元再加括号包起来👈 |
7️⃣ 性能对比:三元 VS 普通 if
import timeit
# 三元
timeit.timeit("y = 1 if x else 0", "x=1", number=10**7)
# 普通 if
timeit.timeit("""if x:\n y=1\nelse:\n y=0""", "x=1", number=10**7)
结果:三元略快,但差距微秒级——
重点是省行数,不是省 CPU🤏
🎯 总结口诀(背它!)
A if 条件 else B
嵌套别过俩,括号要戴好
列表推导一起用,代码秒变 优雅怪 💅