许多 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 风格不仅仅是减少行数,更重要的是让意图得以明确展现。

在将来编写条件语句时,适当应用上述示例,将能自然地编写出更加优雅的代码。


Tux Zen

简单胜于复杂。——摘自 Python 之禅