Example converted to pattern matching
Here’s the equivalent code using match and case:
match x:
case int():
pass
case str():
x = int(x)
case float() | Decimal():
x = round(x)
case _:
raise TypeError('Unsupported type')
Explanation
PEP 634 specifies that isinstance() checks are performed with class patterns. To check for an instance of str, write case str(): ...
. Note that the parentheses are essential. That is how the grammar determines that this is a class pattern.
To check multiple classes at a time, PEP 634 provides an or-pattern using the |
operator. For example, to check whether an object is an instance of float or Decimal, write case float() | Decimal(): ...
. As before, the parentheses are essential.