Что выведет код Middle Типизация обновлено
match по типам
Вопрос
Что выведет код? По строке на каждый print.
def describe(v: int | str | list[int] | None) -> str:
match v:
case None:
return 'none'
case int(n) if n < 0:
return 'neg'
case int():
return 'int'
case str() as s:
return 'str:' + s
case [first, *_]:
return f'list:{first}'
case _:
return 'empty'
print(describe(-5), describe(7), describe('ok'))
print(describe([3, 4]), describe([]), describe(None))
Попробуйте сами
Напишите, что выведет код: каждый вывод с новой строки.
Показать ответ и разбор
Коротко
Код выведет: neg int str:ok, list:3 empty none. match проверяет шаблоны сверху вниз. int(n) if n < 0 срабатывает для отрицательных, остальные целые ловит int().
Что выведет
neg int str:ok
list:3 empty none
Разбор
match проверяет шаблоны сверху вниз. int(n) if n < 0 срабатывает для отрицательных, остальные целые ловит int(). Для пустого списка шаблон [first, *_] не подходит (нужен хотя бы один элемент), и срабатывает case _. Анализаторы понимают match как сужение типа.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.