You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python的if语句中存在多个and连接的条件是否属于糟糕代码?

结论先行

你写的这段代码功能完全正确,做算法题这类一次性交付的代码时,这种写法是高效实用的,算不上质量差。但如果是需要长期维护、后续还有迭代需求的代码,这种长条件拼接的写法确实有可优化的空间。

现有写法的优劣势

  • 优势:逻辑直白无额外封装,写起来速度快,运行时没有额外开销,对于固定的判断场景完全够用。
  • 劣势:
    1. 可维护性低:如果后续需要新增/删除校验字段、修改判断规则,要在长串的and条件里修改,很容易出现漏改、拼写错误的问题。
    2. 可读性弱:多个条件挤在同一行,很难快速扫全所有必填的校验项。

更易维护的改写方案

你可以把必填字段抽成独立的常量集合,用Python内置的all()语法或者集合子集判断来简化逻辑,改写后代码如下:

# 提前定义所有必填字段,后续修改规则只要改这个列表/集合即可
REQUIRED_FIELDS = {"byr", "iyr", "eyr", "hgt", "hcl", "ecl", "pid"}

def check_for_valid_passports(inp):
    num_of_valid_passports = 0
    for x in inp:
        # 替换原来的长串and条件
        if all(field in x for field in REQUIRED_FIELDS):
            num_of_valid_passports += 1
    return num_of_valid_passports

如果你的输入项x是字典结构,还可以用集合的子集判断进一步简化:

if REQUIRED_FIELDS.issubset(x.keys()):

写法选择的判断标准

  • 如果是写算法题、临时脚本这类用完即弃的代码,你原来的写法没有任何问题,不需要额外修改。
  • 如果是业务代码、或者后续还要拓展校验逻辑(比如这道题的第二问还要校验每个字段的格式是否合法),建议用抽离规则常量的写法,后续拓展成本会低很多。

内容的提问来源于stack exchange,提问作者vašek černohorskej

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 14:24:09