在OCaml或类似语言中我会做这样的事情:
let hello a b c =
match (a, b, c) with
| (1, 1, 1) -> 1
| (2, 2, 2) -> 2
| (_, _, 3) -> 3
| (_, _, _) -> 4
Python有没有这种方法呢?现在我正在使用
if a==1 and b==1 and c==1:
return 1
elif a==2 and b==2 and c==2:
return 2
elif c==3:
return 3
else:
return 4
这是最实用的Python吗?
答案 0 :(得分:1)
正如@SilverSlash所提到的,您可以动态地将变量分组为元组。保存重写(a,b,c)
的一种方法是使用循环,并将变量本身用于通配符:
def hello (a,b,c):
for (match,result) in (
((1,1,1),1),
((2,2,2),2),
...,
((a,b,3),3),
...):
if (a,b,c) == match:
return result
return "elseValue"
这看起来有点像您习惯的代码。我不能说它是否是惯用的,但我认为它作为标准的if-else列表同样可以。如果您只想查看最后一个元素,那么执行完整列表检查有点浪费运行时间,但对于许多应用程序而言可能并不重要。
即使你去了if-else,我肯定会分组为元组,而不是在每个元素之间使用and
。那(我认为 - 也许是一个基于意见的问题?)更加惯用。