Python中如何简化大量if else语句,替代switch case的写法?

condition 条件语句包含多个判断条件的话

if condition_1:
    statement_block_1
elif condition_2:
    statement_block_2
elif condition_3:
    statement_block_3
elif condition_4:
    statement_block_4
elif condition_5:
    statement_block_6
else:
    statement_block_7


Python中如何简化大量if else语句,替代switch case的写法?

17 回复

不确定是不是足够好的方法,如果分支太多可以用字典存 func,或者可以用 default dict 应对 default 情况
py<br>def func1(*args, **kwargs):<br> pass<br><br>def func2(*args, **kwargs):<br> pass<br><br>func_dict = {<br> 'condition1': func1,<br> 'condition2': func2,<br>}<br><br>real_condition = 'condition1'<br>func_dict[real_condition]()<br>

逻辑特别简单的话,也可以用 lambda 表达式省行数


在Python里没有switch-case,但处理大量if-elif-else时,可以用字典映射或者match-case(Python 3.10+)来简化。

1. 字典映射(最常用的替代方案) 把每个条件对应的值或函数存到字典里,通过键直接调用:

def handle_case_1():
    return "处理情况1"

def handle_case_2():
    return "处理情况2"

handlers = {
    'case1': handle_case_1,
    'case2': handle_case_2,
    'default': lambda: "默认处理"
}

# 使用示例
case_key = 'case1'
result = handlers.get(case_key, handlers['default'])()
print(result)  # 输出:处理情况1

2. match-case(Python 3.10+ 原生支持) 语法类似其他语言的switch,可匹配值和模式:

def handle_value(value):
    match value:
        case 1:
            return "数字1"
        case "hello":
            return "字符串hello"
        case [x, y]:
            return f"列表包含两个元素: {x}, {y}"
        case _:
            return "默认情况"

print(handle_value([1, 2]))  # 输出:列表包含两个元素: 1, 2

3. 类方法分派 用类的__init__或专门的方法来路由:

class CaseHandler:
    def __init__(self, case_type):
        handler = getattr(self, f'handle_{case_type}', self.handle_default)
        handler()
    
    def handle_type1(self):
        print("处理类型1")
    
    def handle_type2(self):
        print("处理类型2")
    
    def handle_default(self):
        print("默认处理")

CaseHandler('type1')  # 输出:处理类型1

字典映射适合简单值映射,match-case适合复杂模式匹配,类方法适合面向对象场景。

总结:根据场景选字典或match-case。

一楼正解

学习了

用字典啊, 哥

if 条件包括多个判断语句啊,用字典怎么搞?
if a==b and a>0:
condition

如果对顺序有要求,不要用字典,用 tuple 封装

我比较好奇 lambda 表达式

其实直接用多个 if elif 就很好。

老铁,借一步说话

不明白为什么要把这种最简单明了且容易读的代码改成别的?
写代码的目的难道不是为了在不影响效果的前提下简单明了易读吗,if elif 最完美

效率上有差距,虽然大多数的情况下不管,但是作为纯技术讨论是有意义的

附带官方解释: https://docs.python.org/2/faq/design.html#why-isn-t-there-a-switch-or-case-statement-in-python

if else 是官方认可的方式

厉害了,没想到官方居然还真考虑过这个问题:smile:

如果我没记错的话,是专门不设计 switch 语句的

又学到一波操作

Python cookbook 你值得拥有

回到顶部