Почему модуль оператора не имеет функции для логического или? - PullRequest
11 голосов
/ 25 октября 2011

В Python 3 operator.or_ эквивалентен побитному |, а не логическому or.Почему нет оператора для логического or?

Ответы [ 3 ]

18 голосов
/ 25 октября 2011

Операторы or и and не могут быть выражены в виде функций из-за их короткого замыкания поведения:

False and some_function()
True or some_function()

в этих случаях some_function() являетсяникогда не вызывается.

Гипотетический or_(True, some_function()), с другой стороны, должен был бы вызвать some_function(), потому что аргументы функции всегда вычисляются до вызова функции.

7 голосов
/ 25 октября 2011

Логическая или управляющая структура - она ​​решает, выполняется ли код.Рассмотрим

1 or 1/0

Это не выдает ошибку.

В противоположность этому, следующее выдает ошибку, независимо от того, как работает функцияреализовано:

def logical_or(a, b):
  return a or b
logical_or(1, 1/0)
1 голос
/ 26 октября 2011

Если вы не возражаете против отсутствия короткого замыкания, упомянутого другими; Вы можете попробовать следующий код.

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

...