Что выведет код 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 ошибок.