Python中大量的if语句,有没有更简洁优雅的写法?

主要用途是对渐入的关键字进行“修正”,以完全匹配目标表内的查询字符。

目前是这种写法

if keystring == 'sun': keystring = 'Sun Ltd.,' if keystring == 'run': keystring = 'Running well Ltd.,' if keystring == 'fit': keystring = 'nice fitting Ltd.,'

这样简单的替换可能有几十个,长长一串特别难看。最终替换成的目标又不是一样的,也没法用函数。

求教有没有什么好看一些的写法?不用写个几十行?


Python中大量的if语句,有没有更简洁优雅的写法?

20 回复

打表呗


用字典映射或策略模式替代大量if/else是常见优化手段。比如处理不同用户类型的逻辑:

def process_vip(user): return "VIP服务"
def process_normal(user): return "普通服务"
def process_guest(user): return "访客服务"

handlers = {
    'vip': process_vip,
    'normal': process_normal, 
    'guest': process_guest
}

# 使用方式
user_type = 'vip'
result = handlers.get(user_type, lambda x: "默认处理")(user_data)

如果条件判断基于值范围,可以用bisect模块:

import bisect
breakpoints = [60, 80, 90]
grades = ['D', 'C', 'B', 'A']
score = 85
grade = grades[bisect.bisect(breakpoints, score)]

对于对象类型判断,多态比if/else更优雅。用match/case(Python 3.10+)也能让代码更清晰:

match command.split():
    case ["quit"]: print("退出")
    case ["load", filename]: print(f"加载{filename}")
    case _: print("未知命令")

总结:根据场景选合适的方法替换if链。

写个 dict 存起来。

建个 map,从 map 里面取值

那就用 switch 啊

封装成方法 用 getattr 调

python not have switch

你把正确的都放在一个 list 里面,[‘Sun Ltd’, ‘Running well Ltd’ , 'nice fitting Ltd ']

然后把用户输入的去匹配列表中的,取出来,不就行了

表驱动了解一下

代码大全,表驱动法

写个字典{‘sun’:‘Sun Ltd’}这种,for i in dict:keystring=dict[i]

表驱动

python<br>replaces = {'sun': 'sun ltd', 'oracle': 'oracle ltd', }<br>for k in keys:<br> v = replaces.get(k, '')<br>

不过看你这个需求有点像关键词屏蔽 :D 这种其实你用正则把许多关键词用|连起来也可以的

corps = {‘sun’: ‘Sun Ltd.,’}
keystring = corps.get(keystring, default=‘Other’)


这和 python 也没太大关系, 你需要的是一个 dict(map)

一楼说得对

感谢各位!

之前只知道 list 和 dic,但并不清楚 dict(map),表驱动这回事。只觉得尽管可以用来判断是否在一个 pool 内,但缺乏映射关系的表达。可能也是没有系统的学习有关。已经达成。谢谢!

最近 node 写多了,忘了 python 没有了(捂脸跑)

用字典

dict 这个主意不错

表驱动了解下。
咦,有人讲过了。

回到顶部