嗯, Python 中没有 switch/case 语句。
对于小号list,要使用if/elif:
def do_stuff(x, *args):
if x == 'ADD':
return do_add(*args)
elif x == 'SUB':
return do_sub(*args)
# …
else:
raise RuntimeError('Never heard of {}'.format(x))
对于更大的list,您要确保每个案例都是一个函数(我已经在上面假设了,但是如果您有类似return args[0] + args[1] 的代码,则必须将其更改为do_add 函数),并创建一个dict 将名称映射到函数:
func_map = {'ADD': do_add, 'SUB': do_sub, … }
def do_stuff(x, *args):
try:
return func_map[x](*args)
except KeyError:
raise RuntimeError('Never heard of {}'.format(x))
之所以可行,是因为在 Python 中,函数是普通对象,您可以像传递任何其他对象一样传递它们。因此,您可以将它们存储在 dict 中,从 dict 中检索它们,然后仍然调用它们。
顺便说一句,这一切都在the FAQ 中进行了解释,还有一点额外的花哨。
如果您想调用一些默认函数而不是引发错误,那么很明显如何使用 if/elif/else 链来执行此操作,但您如何使用dict 地图?您可以将默认函数放入except 块中,但有更简单的方法:只需使用dict.get 方法:
def do_stuff(x, *args):
return func_map.get(x, do_default)(*args)