С Python 3.10.2 рассмотрите этот фрагмент кода.
def print_type(v):
match v:
case int() as v:
s = f"int {v}"
case bool() as v:
s = f"bool {v}"
case _:
s = "other"
print(s)
Попробуйте с «s = False», и он напечатает «bool False», как и ожидалось. Теперь поменяйте местами случаи bool() и int(), и теперь результатом будет «int False». Не совсем то, что я ожидал.
Это ошибка? Если это так, я опубликую на форуме Python.
РЕДАКТИРОВАТЬ
Основываясь на ответе тринкота, вот версия кода с ожидаемым поведением.
def print_type(v):
match v:
case int() as v:
if isinstance(v, bool):
s = f"bool {v}"
else:
s = f"int {v}"
case _:
s = "other"
print(s)
Я думаю, вы описываете это неправильно?! Код примера напечатает int False
вместо print_type(False)
…
Нет, это не ошибка. bool
является подклассом int
, поэтому каждое логическое значение также является целым числом.
print(isinstance(True, int)) # True
Твое право. Основное понятие, о котором я должен был подумать.
Вы имели в виду "Попробуйте с
v = False
"?