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

如何优化Python中存在大量嵌套if语句的招聘流程状态判断代码

减少多层嵌套if语句的最佳实践

你这段代码本质是按优先级匹配互斥的流程阶段,没有复杂的分支交叉,完全可以通过以下几种方案优化可读性和可维护性:

1. 使用卫语句(早返回)消除嵌套

直接去掉所有else分支,只要匹配到对应条件就直接赋值/返回,不需要嵌套后续判断:

def get_phase(self):
    if not self.test_done:
        return "Test"
    if self.need_video and not self.video_sent:
        return 'Video'
    if not self.screening1_made and not self.screening2_made:
        return 'Screening 1'
    if (self.screening1_made and not self.screening2_made) or not self.passed_screening:
        return 'Screening 2'
    if not self.passed_phase1:
        return 'Interview 1'
    if not self.passed_phase2:
        return 'Interview 2'
    if not self.passed_phase3:
        return 'Interview 3'
    if not self.got_offer:
        return 'Waiting offer decision'
    if self.accepted_offer is None:
        return 'Waiting decision from candidate'
    if self.accepted_offer == "Accepted":
        return 'Accepted offer'
    if self.accepted_offer == "Declined":
        return 'Declined offer'

这种方案改动最小,可读性比原嵌套结构提升非常明显,新增阶段只要按优先级插入对应位置即可。

2. 条件映射表遍历匹配

如果阶段规则经常调整,你可以把所有判断条件和对应的阶段名称封装成有序的映射列表,按优先级遍历匹配第一个符合的条件即可:

def get_phase(self):
    phase_rules = [
        (lambda: not self.test_done, "Test"),
        (lambda: self.need_video and not self.video_sent, "Video"),
        (lambda: not self.screening1_made and not self.screening2_made, "Screening 1"),
        (lambda: (self.screening1_made and not self.screening2_made) or not self.passed_screening, "Screening 2"),
        (lambda: not self.passed_phase1, "Interview 1"),
        (lambda: not self.passed_phase2, "Interview 2"),
        (lambda: not self.passed_phase3, "Interview 3"),
        (lambda: not self.got_offer, "Waiting offer decision"),
        (lambda: self.accepted_offer is None, "Waiting decision from candidate"),
        (lambda: self.accepted_offer == "Accepted", "Accepted offer"),
        (lambda: self.accepted_offer == "Declined", "Declined offer"),
    ]
    for condition, phase in phase_rules:
        if condition():
            return phase

这种方案把规则和逻辑完全解耦,后续修改规则不需要动逻辑代码,直接调整phase_rules列表即可,适合规则频繁变动的场景。

3. 状态机模式(适用于复杂状态流转场景)

如果你的流程除了状态判断,还要处理状态之间的跳转逻辑、状态触发动作,推荐用有限状态机实现。可以自己实现简单的状态类,每个状态自己负责判断是否匹配、对应的流转逻辑,完全避免硬编码的if判断。
这种方案适合中大型项目的复杂流程管理,可扩展性最强,新增状态只要新增对应的状态类即可,不需要修改原有逻辑。


内容的提问来源于stack exchange,提问作者Fred

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 10:48:02