and и or как выбор значения
В Python and и or не просто дают True или False — они возвращают одно из операндов. Это удобный приём.
or — значение по умолчанию
Выражение a or b возвращает a, если оно «истинно», иначе b. Пустая строка, 0 и None считаются «ложными». Поэтому or удобно для значения по умолчанию: name or 'друг' даст 'друг', если name пустой.
name = ''
print(name or 'друг') # 'друг'
and — до первого «ложного»
Выражение a and b возвращает a, если оно «ложно» (и дальше не смотрит), иначе b. Это позволяет безопасно обращаться к чему-то, только если предыдущее не пустое.
Осторожно с нулём
Приём мощный, но есть ловушка: 0 и пустая строка — «ложные», поэтому 0 or 5 даст 5, даже если 0 был осмысленным значением. Если ноль допустим, проверяйте явно через if, а не через or.
Частые вопросы
or всегда возвращает True/False? Нет, он возвращает один из операндов; True/False — лишь частный случай.
Когда лучше обычный if? Когда 0 или пустая строка — допустимые значения, чтобы их случайно не заменить.
Начать игру бесплатно