Python y / u operadores devuelven valor

Estaba viendo un video de 2007 en Advanced Python o Understanding Python , y a las 18’27 “el orador afirma” Como algunos pueden saber en Python yyy devolver uno de los dos valores, mientras que not devuelve siempre un valor booleano. ha sido el caso?

Por lo que puedo decir, and y or devuelve booleanos, también.

Los operadores y or y devuelven uno de sus operandos, no un valor booleano puro como True o False :

 >>> 0 or 42 42 >>> 0 and 42 0 

Mientras que not siempre devuelve un valor booleano puro:

 >>> not 0 True >>> not 42 False 

Consulte esta tabla en la referencia de la biblioteca estándar en los documentos de Python:

Operaciones Booleanas

de los documentos de Python :

El operador no arroja Verdadero si su argumento es falso, Falso de lo contrario.

La expresión xey primero evalúa x; si x es falso, su valor es devuelto; de lo contrario, se evalúa y y se devuelve el valor resultante.

La expresión x o y primero evalúa x; Si x es verdadero, se devuelve su valor; de lo contrario, se evalúa y y se devuelve el valor resultante.

El operador de Python or devuelve el primer valor de Verdad-y, o el último valor, y se detiene. Esto es muy útil para asignaciones de progtwigción comunes que necesitan valores de respaldo.

Como este sencillo:

 print my_list or "no values" 

Esto imprimirá my_list , si tiene algo en ella. De lo contrario, no se imprimirá no values (si la lista está vacía, o si es None …).

Un ejemplo simple:

 >>> my_list = [] >>> print my_list or 'no values' no values >>> my_list.append(1) >>> print my_list or 'no values' [1] 

El complemento mediante and , que devuelve el primer valor de Falso-y, o el último valor, y se detiene, se usa cuando se quiere una guardia en lugar de una alternativa.

Como éste:

 my_list and my_list.pop() 

Esto es útil ya que no puede usar list.pop en None , o [] , que son valores anteriores comunes a las listas.

Un ejemplo simple:

 >>> my_list = None >>> print my_list and my_list.pop() None >>> my_list = [1] >>> print my_list and my_list.pop() 1 

En ambos casos se devolvieron valores no booleanos y no se generaron excepciones.

Necesito agregar algunos puntos a la respuesta de @Frédéric.

¿Devuelven uno de sus operandos?

Es cierto, pero esa no es la lógica detrás de esto. En python, un número, excepto 0, se considera verdadero y el número 0 se considera falso.

(0 y 42 -> Falso y Verdadero) = Falso.

Es por eso que devuelve 0.

(0 o 42-> falso o verdadero) = 42

En ese caso, la statement será verdadera debido al operando 42. así que python devuelve el operando que hace que la statement sea verdadera, en ese caso.