2011-02-25 20 views
40

Intenté funcionar este pedazo de código:'True' y 'falso' en Python

path = '/bla/bla/bla' 

if path is True: 
    print "True" 
else: 
    print "False" 

e imprime Falso. Pensé que Python trata cualquier cosa con valor como True. ¿Por qué está pasando esto?

Respuesta

57

De http://docs.python.org/reference/expressions.html#boolean-operations:

En el contexto de las operaciones booleanas, y también cuando las expresiones son utilizadas por los estados de flujo de control, los siguientes valores se interpretan como falsa: Falso, Nada, cero numérico de todos los tipos, y cadenas vacías y contenedores (incluidas cadenas, tuplas, listas, diccionarios, conjuntos y conjuntos congelados). Todos los demás valores se interpretan como verdaderos.

El enunciado clave aquí que yo creo que está malentendido es "interpretado como falsa" o "interpretado como verdadero". Esto no significa que ninguno de esos valores sea idéntico a True o False, o incluso igual a True o False.

La expresión '/bla/bla/bla' serán tratados como cierto cuando se espera una expresión booleana (como en una declaración if), pero las expresiones '/bla/bla/bla' is True y '/bla/bla/bla' == True se evaluará como falso por las razones de la respuesta de Ignacio.

+6

+1 Creo que este es el malentendido subyacente. Quizás ayude saber que hay una función 'bool' que '' interpreta '' un valor como booleano. Se podría decir que esta función se llama implícitamente en cada 'si' (que probablemente no sea cierta en un sentido técnico, pero al menos agregarla nunca cambia el comportamiento de una instrucción if). –

88

is compara la identidad. Una cadena nunca será idéntica a una cadena no.

== es igualdad. Pero una cadena nunca será igual a True o False.

No desea ninguno.

path = '/bla/bla/bla' 

if path: 
    print "True" 
else: 
    print "False" 
Cuestiones relacionadas