Поведение if с логическим or при ложных операндах

Ветка if не выполнится, а print(a) выведет 0. Пустой список ложен, поэтому or возвращает второй операнд — число 0, которое тоже ложно.

Короткий ответ

Что ответить на собеседовании

Ветка if не выполнится, а print(a) выведет 0. Пустой список ложен, поэтому or возвращает второй операнд — число 0, которое тоже ложно.

Подробный разбор

Ответ с пояснениями

Условие

Определите, выполнится ли ветка if, учитывая, что обе составляющие условия дают False (пустой список [] и число 0). Будет ли выполнено тело if в следующем фрагменте кода:

a = [] or 0

if [] or 0:
    pass

print(a)

Ответ

Ветка if не выполнится, а print(a) выведет 0. Пустой список ложен, поэтому or возвращает второй операнд — число 0, которое тоже ложно.

or не обязан возвращать bool. Он выбирает первый истинный операнд либо последний, если истинных нет.

print(a)        # 0
print(type(a))  # <class 'int'>

Условие if затем проверяет истинность полученного значения, не меняя его тип. Если бы справа была непустая строка, a получило бы эту строку и ветка выполнилась. pass внутри ветки в любом случае не создаёт видимого результата.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее