如何优化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
相关产品推荐
相关产品推荐

