如何在Python 3.10中的匹配(其他语言中切换)案例中使用多个案例

Egi*_*ius 78 python match switch-statement python-3.10

我正在尝试在类似于下面所示的函数中使用多个案例,以便我能够使用 python 3.10 中的匹配案例来执行多个案例

def sayHi(name):
    match name:
        case ['Egide', 'Eric']:
            return f"Hi Mr {name}"
        case 'Egidia':
            return f"Hi Ms {name}"
print(sayHi('Egide'))
Run Code Online (Sandbox Code Playgroud)

即使我删除了方括号,这只是返回None而不是消息。

khe*_*ood 136

根据\n What\xe2\x80\x99s New In Python 3.10、\n PEP 636和\n文档,\n您使用了|Between 模式:

\n
case \'Egide\' | \'Eric\':\n
Run Code Online (Sandbox Code Playgroud)\n


Bla*_*ake 27

您可以使用|() 来替换['Egide', 'Eric']with 'Egide' | 'Eric',但您也可以将属于可迭代对象或容器的元素与守卫匹配如下所示:

CONSTANTS = ['a','b', ...] # a (possibly large) iterable

def demo(item):
    match item:
        case item if item in CONSTANTS:
            return f"{item} matched"
        case _:
            return f"No match for {item}"
Run Code Online (Sandbox Code Playgroud)

  • 你好@odigity——这只是一个未使用的变量名,所以你可以随意命名它 (7认同)
  • ‘case other’不应该是‘case _’吗? (5认同)
  • @blake,同意,但(非)官方约定似乎是 _ 对于默认情况。 (4认同)
  • @interDist,同意,但由于案例正文中未使用“other”,我仍然推荐_。 (2认同)