将多个 isinstance 检查转换为结构模式匹配
Convert multiple isinstance checks to structural pattern matching
我想将此现有代码转换为使用模式匹配:
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)
等多种可能的类型进行测试?
转换为模式匹配的示例
这是使用 match 和 case 的等效代码:
match x:
case int():
pass
case str():
x = int(x)
case float() | Decimal():
x = round(x)
case _:
raise TypeError('Unsupported type')
说明
PEP 634 specifies that isinstance() checks are performed with class patterns。要检查 str 的实例,请写入 case str(): ...
。请注意,括号是必不可少的。这就是语法如何确定这是一个 class 模式。
为了一次检查多个 classes,PEP 634 使用 |
运算符提供了 or-pattern。例如,要检查一个对象是否是 float 或 Decimal 的实例,请写 case float() | Decimal(): ...
。和以前一样,括号是必不可少的。
我想将此现有代码转换为使用模式匹配:
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)
等多种可能的类型进行测试?
转换为模式匹配的示例
这是使用 match 和 case 的等效代码:
match x:
case int():
pass
case str():
x = int(x)
case float() | Decimal():
x = round(x)
case _:
raise TypeError('Unsupported type')
说明
PEP 634 specifies that isinstance() checks are performed with class patterns。要检查 str 的实例,请写入 case str(): ...
。请注意,括号是必不可少的。这就是语法如何确定这是一个 class 模式。
为了一次检查多个 classes,PEP 634 使用 |
运算符提供了 or-pattern。例如,要检查一个对象是否是 float 或 Decimal 的实例,请写 case float() | Decimal(): ...
。和以前一样,括号是必不可少的。