2010-12-18 11 views
22

estaba viendo un 2007 video on Advanced Python or Understanding Python regresan, y en 18'27" las reclamaciones de los altavoces 'Como algunos sabrán en Python and y or devolver uno de los dos valores, mientras que not vuelve siempre un valor lógico'. cuando esto ha sido el caso?pitón y/o operadores de valor

Por lo que yo puedo decir, and y or booleanos de retorno, también.

+0

Lo que quizás te haga tropezar es que puedes usar cualquier tipo de datos en un contexto que parezca querer un booleano. 'si 17: blah' es legal. –

Respuesta

34

el and y or operadores hacer devolver uno de sus operandos, no un valor booleano puro como True o False:

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

Mientras not siempre devuelve un valor puro booleano:

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

¿Sabes cuál es el orden de los operandos devueltos? ¿Primero en llegar? – ash

+8

El primer valor (de izquierda a derecha) que determina el resultado (es decir, truish o false) es el resultado. –

+0

devuelven uno de sus operandos. ??? La lógica es incorrecta. por favor mira mi respuesta. –

22

Ver this tabla de la referencia de la biblioteca estándar en la documentación de Python:

Boolean Operations

+1

La parte 'es falsa' es un poco confusa. Es más parecido a Falso o se evalúa en un 'si' a Falso – Adam

13

de Python docs:

El operador no cede True si su argumento es falso, de lo contrario es False.

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

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

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

gusta esta sencilla:

print my_list or "no values" 

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

Un ejemplo sencillo:

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

El cumplido mediante el uso de and, que devuelve el primer valor falso y, o el último valor, y se detiene, se utiliza cuando se desea un guardia en lugar de un repliegue.

como ésta:

my_list and my_list.pop() 

Esto es útil ya que no se puede utilizar en list.popNone, o [], que son valores comunes a las listas anteriores.

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 devuelven valores no booleanos y sin excepciones fueron criados.

0

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

¿devolver uno de sus operandos ???

Es cierto. Pero esa no es la lógica detrás de esto. En python, los números excepto 0 se consideran verdaderos y el número 0 se considera falso.

(o y 42-> Falso y verdadero) = False.

Es por eso que devuelve 0.

(0 o 42-> falsa o verdadera) = 42

En ese caso, la declaración será cierto, porque el operando de 42. entonces python devuelve el operando que hace que la declaración sea verdadera, en ese caso.