¿Por qué el módulo operador no tiene una función lógica o?

En Python 3, operator.or_ es equivalente a bitwise | , no lo lógico or . ¿Por qué no hay operador para el lógico or ?

Los operadores or y and no pueden expressse como funciones debido a su comportamiento de cortocircuito :

 False and some_function() True or some_function() 

en estos casos, nunca se llama a some_function() .

Un hipotético or_(True, some_function()) , por otro lado, tendría que llamar some_function() , porque los argumentos de la función siempre se evalúan antes de llamar a la función.

La lógica o es una estructura de control : decide si el código se está ejecutando. Considerar

 1 or 1/0 

Esto no arroja un error.

En contraste, lo siguiente produce un error, sin importar cómo se implemente la función:

 def logical_or(a, b): return a or b logical_or(1, 1/0) 

Si no te importa la falta de comportamiento de cortocircuito mencionado por otros; Podrías probar el siguiente código.

all([a, b]) == (a and b)

any([a, b]) == (a or b)

Ambos aceptan una única colección (como una lista, tupla e incluso un generador) con 2 o más elementos, por lo que lo siguiente también es válido:

all([a, b, c]) == (a and b and c)

Para obtener más información, consulte la documentación en cuestión: http://docs.python.org/py3k/library/functions.html#all