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的写法?
不确定是不是足够好的方法,如果分支太多可以用字典存 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 你值得拥有
字典


