许多 Python 入门者习惯使用 if
, elif
, else
编写条件语句,但当代码变得越来越长并且嵌套时,可读性开始下降。作为一种追求“易读代码”的语言,Python 提供了多种方法,可以更优雅和简洁地表达条件语句。
本文将介绍一些超越传统条件语句,处理条件分支的 Pythonic 提示和示例。
1. 条件表达式(Conditional Expression,亦称三元运算符)
status = "成熟女性" if age >= 18 else "未成年人"
- 可以用一行写
if/else
表达式 - 但要避免嵌套使用(会影响可读性)
2. 利用 Truthy / Falsy 值
if items:
print("列表中有项存在.")
在 Python 中,以下值在条件语句中会被评估为 False
:
- 空容器([]
, {}
, ''
)
- 数字 0(0
, 0.0
)
- None
其他值都被认为是 True
,因此上述代码是成立的。
初学者通常会写出以下代码:
if len(items) > 0:
print("列表中有项存在.")
但是在 Python 中,len(items)
为 0 时会被视为 False,1 或以上则视为 True,因此,上面的代码可以简化为 if items:
。
这种写法是同时搭上了 可读性, 简洁性, 和 Pythonic 代码风格的三只兔子。不过,若是过于省略而导致意图不明时,添加注释也是很好的选择。
3. 利用 Guard Clause 减少嵌套
def process(user):
if not user.is_active:
return "非活跃用户."
# 其余逻辑
- 与其在
if
里嵌套代码块,不如快速返回或者结束 - 若条件未满足则先返回(早返回)
4. 用字典替代条件分支
def get_status(code):
return {
200: "OK",
404: "未找到",
500: "服务器错误"
}.get(code, "未知")
- 用
dict
映射提高可读性,替代if-elif
- 使用
.get()
设置默认值也很方便
5. 利用 any()
/ all()
简化复杂条件
if any([is_admin, is_staff, is_moderator]):
grant_access()
- 只要有一个条件为 True →
any()
- 需所有条件都为 True 时 →
all()
6. 利用 or
运算符处理默认值
Python 的 or
运算符 在左侧值被评估为 False 时返回右侧值。利用这一特性,我们可以优雅地指定默认值,如下:
username = input("请输入名字:") or "无名"
或者在函数返回值可能为空的情况下,自然设定 fallback 值:
items = get_items() or ["默认项"]
这种方式在没有条件语句的情况下,也能简短直观地替代指定值,非常实用。
🔍 使用
.get('key', 'default')
来访问字典时,可以安全地检查键的存在性并返回默认值。但or
在处理常规变量或函数返回值等时,更加简洁适合 fallback 处理。
7. 模式匹配(match-case
) - Python 3.10+
def handle_error(code):
match code:
case 400:
return "错误请求"
case 404:
return "未找到"
case _:
return "未知错误"
- 在 Python 3.10 及以上版本中可用
- 替代 switch-case,支持解构
结论
简洁地整理条件语句即可大幅提升代码的可读性和可维护性。Pythonic 风格不仅仅是减少行数,更重要的是让意图得以明确展现。
在将来编写条件语句时,适当应用上述示例,将能自然地编写出更加优雅的代码。
简单胜于复杂。——摘自 Python 之禅
Add a New Comment