模式匹配Python中的多个变量

时间:2018-01-27 10:55:10

标签: python pattern-matching

在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吗?

1 个答案:

答案 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。那(我认为 - 也许是一个基于意见的问题?)更加惯用。

相关问题