Así es como funcionan los operadores booleanos de Python.
En el contexto de las operaciones booleanas, y también cuando las expresiones son utilizadas por de control estados de flujo, las siguientes valores se interpretan como falsa: False
, None
, numérico cero de todos los tipos , y cadenas vacías y contenedores (incluyendo cadenas, tuplas, listas, diccionarios, conjuntos y conjuntos congelados). Todos los demás valores son interpretados como verdaderos. (Véase el método especial __nonzero__()
una manera de cambiar esto.)
El operador not
produce True
si su argumento es falso , False
lo contrario.
La expresión x and y
primero evalúa x
; si x
es falso, su valor es devuelto; de lo contrario, y
se evalúa y se devuelve el valor resultante.
La expresión x or y
primero evalúa x
; si x
es verdadero, su valor es devuelto; de lo contrario, y se evalúa y se devuelve el valor resultante.
(Tenga en cuenta que ni and
ni or
restringir el valor y tipo regresan a False
y True
, sino más bien devolver el argumento evaluado por última vez. Esto es veces es útil, por ejemplo, si s
es una cadena que debe ser reemplazado por un valor predeterminado si está vacío, la expresión s or 'foo'
se obtiene el valor deseada. Debido not
tiene que inventar un valor de todas formas, no se molestan en devolver un valor de la misma tipo como su argumento, por lo que por ejemplo, not 'foo'
produce False
, no ''
.)
'spam if foo == bar or eggs' muestra un error de sintaxis en python 2.6.5, pero 'spam if foo == bar else eggs' funciona como se esperaba. – Zxaos
@Zxaos: Perdón por eso. Debería haber sido 'else' no' o'. Corregido ahora. –
En "el resultado incorrecto ... si foo evalúa a un valor de falsey", ¿quiso decir "spam evalúa a un valor Falsey"? – unutbu