匹配案例中的条件语句

5 python case match python-3.10

Python 中是否可以使用条件语句作为匹配语句的情况?

工作是这样的:

test = 'Aston Martin'
makes = ['Aston Martin', 'Bentley']

match test:
    case if test in makes:
        print(True)
    case _:
        print(False)
Run Code Online (Sandbox Code Playgroud)

我知道 match/case 并不是在寻找具有布尔值 True 的东西,但这似乎对于缩放事物很有用。

我尝试将其作为函数来执行,以便您可以返回精确匹配:

test = 'Aston Martin'
makes = ['Aston Martin', 'Bentley']

def return_bool(item, lists):
    if item in lists:
        return item
    else:
        return 'notmatching'

match test:
    case return_bool(test, makes):
        print(True)
    case _:
        print(False)
Run Code Online (Sandbox Code Playgroud)

这也行不通。我认为它期待一个格式输出,例如str(x).

mCo*_*ing 6

正如评论指出的那样,您提供的代码似乎更适合if/elif但是它可以完成,因为match支持所谓的“保护子句”。

test = 'Aston Martin'
makes = ['Aston Martin', 'Bentley']

match test:
    case test if test in makes:
        print(True)
    case _:
        print(False)
Run Code Online (Sandbox Code Playgroud)

makes即使在不是固定顺序的情况下,这也有效。如果makes确实只是固定序列的替代品,那么您也可以使用

test = 'Aston Martin'

match test:
    case 'Aston Martin' | 'Bentley':
        print(True)
    case _:
        print(False)
Run Code Online (Sandbox Code Playgroud)

请注意,您不能执行此操作

test = 'Aston Martin'
makes = ['Aston Martin', 'Bentley']

match test:
    case makes:
        print(True)
    case _:
        print(False)
Run Code Online (Sandbox Code Playgroud)

因为这将始终与第一种情况匹配,makes并用 覆盖test