我通常使用字典实现 switch/case 以进行相等比较。
dict = {0:'zero', 1:'one', 2:'two'};
a=1; res = dict[a]
代替
if a == 0:
res = 'zero'
elif a == 1:
res = 'one'
elif a == 2:
res = 'two'
是否有针对非平等比较实施类似方法的策略?
if score <= 10:
cat = 'A'
elif score > 10 and score <= 30:
cat = 'B'
elif score > 30 and score <= 50:
cat = 'C'
elif score > 50 and score <= 90:
cat = 'D'
else:
cat = 'E'
我知道使用 <、<=、>、>= 可能会很棘手,但是是否有任何策略可以概括它或从假设列表中生成自动语句
{[10]:'A', [10,30]:'B', [30,50]:'C',[50,90]:'D',[90]:'E'}
还有一些标志说它是 <
还是 <=
。
原文由 Kenny 发布,翻译遵循 CC BY-SA 4.0 许可协议
字典可以包含很多值。如果您的范围不是太宽,您可以通过以编程方式扩展每个范围来制作一个类似于您为平等条件所拥有的字典:
您也可以从 if / elif 语句中删除多余的条件,并以不同的方式设置格式。这几乎看起来像一个案例陈述:
为避免重复
score <
,您可以定义一个 case 函数并将其与值一起使用:您可以通过创建一个 switch 函数来概括这一点,该函数返回一个“案例”函数,该函数适用于具有通用比较模式的测试值:
这个通用版本允许各种组合:
当您需要做的只是返回一个值时,还有另一种使用 lambda 函数的方法:
最后一个也可以使用列表理解和映射表来表示:
更具体地说,可以使用根据您的参数返回映射函数的设置函数来创建通用解决方案:
请注意,通过多做一些工作,您可以使用bisect模块提高返回函数的性能。