Почему модуль оператора не имеет функции для логического или?

В 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