В Python 3 оператор .or_ эквивалентен побитовому |
, а не логическому or
. Почему нет оператора для логического or
?
Почему модуль оператора не имеет функции для логического или?
Ответ 1
Операторы or
и and
не могут быть выражены как функции из-за их короткого замыкания:
False and some_function()
True or some_function()
в этих случаях some_function()
никогда не вызывается.
Гипотетический or_(True, some_function())
, с другой стороны, должен был бы вызвать some_function()
, потому что аргументы функции всегда вычисляются до вызова функции.
Ответ 2
Логическая или структура управления - она решает, выполняется ли код. Рассмотрим
1 or 1/0
Это делает не ошибку.
В отличие от следующего делает ошибку, независимо от того, как реализована функция:
def logical_or(a, b):
return a or b
logical_or(1, 1/0)
Ответ 3
Если вы не против недостатка короткого замыкания, упомянутого другими; вы можете попробовать приведенный ниже код.
all([a, b]) == (a and b)
any([a, b]) == (a or b)
Они оба принимают одну коллекцию (например, список, кортеж и даже генератор) с 2 или более элементами, поэтому также справедливо следующее:
all([a, b, c]) == (a and b and c)
Подробнее см. в документации: http://docs.python.org/py3k/library/functions.html#all