Зачем нужны or и and в Python?
Сначала может показаться, что вопрос в заголовке, как минимум, странный и в чём-то даже глупый, но не всё так просто. Как известно, в языке Python есть побитовые операции &(и), |(или), а также ^(строгое или). Однако есть ещё "словесные" братья and и or, которые используются в условиях. Однако зачем они нужны, если можно использовать & и | вместо них и всё будет работать? На этот вопрос мы и попытаемся ответить в данной статье. Для начала лучше вникнем в суть происходящего:
print(True or False) # True print(True | False) # True print(True and False) # False print(True & False) # False
Как можно заметить, результат они выдают одинаковый. Так в чём же разница? Ответить можно одним словом - оптимизация. Наглядно это проиллюстрирует следующий пример:
def print_and_return(boolean): print(boolean) return boolean print("Обычный |") res1 = print_and_return(True) | print_and_return(False) print("Словесный or") res2 = print_and_return(True) or print_and_return(False)
В первом случае, выведутся все 2 значения: результат первой функции, результат второй. А вот во втором случае, нас ждёт сюрприз: второго вызова функции не произойдёт. Почему? Потому что or умеет оптимизировать обработку условий: результат будет истинным независимо от второго условия: ведь первое истинно - так зачем нужно считать второе?
То же самое с and:
def print_and_return(boolean): print(boolean) return boolean print("Обычный &") res1 = print_and_return(False) & print_and_return(True) print("Словесный and") res2 = print_and_return(False) and print_and_return(True)
Понятно, что условие ложно после вычисления первого выражения и and пропускает второе, сразу выдавая результат.
Теперь должно стать ясно, что для условий "выгоднее" использовать or и and вместо | и &, кроме тех случаев, когда необходимо выполнение всех частей условия. Например :
(a != 0) and (1 / a)
никогда не выкинет ошибку деления на ноль. Думаю, таких применений можно придумать массу, но это занятие я оставляю вам, а сам расскажу про ещё одну интересную особенность or и and.
Их можно использовать для inline выражений не только с bool, но и с любыми другими типами, которые приводятся к логическому. Рассмотрим следующие выражения:
print(3 or 10) # 3 print("" or 5) # 5 print("" and 20) # Выведет пустую строку print(3 and 10) # 10
То есть оператор or работает по принципу: если первое выражение - истина, то возвращаем его, иначе возвращаем второе.
And работает по-другому: если первое - ложь, то возвращаем его, иначе вернём второе.
Думаю, теперь вы разобрались, как работают эти 2 оператора и сможете эффективно использовать их особенности в своих программах.
На этом всё.
До новых встреч в группе SnakeBlog