6

我想将此现有代码转换为使用模式匹配:

if isinstance(x, int):
    pass
elif isinstance(x, str):
    x = int(x)
elif isinstance(x, (float, Decimal)):
    x = round(x)
else:
    raise TypeError('Unsupported type')

您如何编写带有模式匹配的isinstance检查,以及如何同时针对多种可能的类型进行测试(float, Decimal)

4

1 回答 1

13

转换为模式匹配的示例

这是使用matchcase的等效代码:

match x:
    case int():
        pass
    case str():
        x = int(x)
    case float() | Decimal():
        x = round(x)
    case _:
        raise TypeError('Unsupported type')

解释

PEP 634指定使用类模式执行isinstance()检查。要检查str的实例,请编写. 请注意,括号是必不可少的。这就是语法如何确定这是一个类模式。case str(): ...

为了一次检查多个类,PEP 634 提供了一个使用运算符的或模式|。例如,要检查对象是float还是Decimal的实例,请编写case float() | Decimal(): .... 和以前一样,括号是必不可少的。

于 2021-05-13T18:51:25.510 回答