valores usar relacionales operadores operaciones not logicas funcion exclusivo como booleanos bool binarios binarias python boolean

usar - ''Verdadero'' y ''Falso'' en Python



valores booleanos y operaciones logicas (3)

Intenté ejecutar este pedazo de código:

path = ''/bla/bla/bla'' if path is True: print "True" else: print "False"

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


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

En el contexto de las operaciones booleanas, y también cuando las expresiones de flujo de control utilizan expresiones, los siguientes valores se interpretan como falsos: Falso, Ninguno, cero numérico de todos los tipos y cadenas y contenedores vacíos (incluidas cadenas, tuplas, listas, diccionarios) , conjuntos y frozensets). Todos los demás valores se interpretan como verdaderos.

La frase clave aquí que creo que usted está malentendido es "interpretada como falsa" o "interpretada como verdadera". Esto no significa que ninguno de esos valores sea idéntico a Verdadero o Falso, o incluso igual a Verdadero o Falso.

La expresión ''/bla/bla/bla'' se tratará como verdadera cuando se espera una expresión booleana (como en una sentencia if ), pero las expresiones ''/bla/bla/bla'' is True y ''/bla/bla/bla'' == True se evaluará como Falso por las razones en la respuesta de Ignacio.


Mientras que los otros pósters abordan por qué is True hace lo que hace, quería responder a esta parte de su publicación:

Pensé que Python trata cualquier cosa con valor como Verdadero. ¿Por qué está pasando esto?

Viniendo de Java, esto también me hizo tropezar. Python no trata nada con un valor como True . Testigo:

if 0: print("Won''t get here")

Esto no imprimirá nada porque 0 es tratado como False . De hecho, cero de cualquier tipo numérico se evalúa como False . También hicieron que los decimal funcionaran de la manera que esperabas:

from decimal import * from fractions import * if 0 or 0.0 or 0j or Decimal(0) or Fraction(0, 1): print("Won''t get here")

Aquí están los otros valores que evalúan a False :

if None or False or '''' or () or [] or {} or set() or range(0): print("Won''t get here")

Fuentes:

  1. https://medium.com/@dawran6/python-truth-value-testing-is-awesome-dae6c23cc1c2
  2. https://docs.python.org/3.7/library/stdtypes.html#truth-value-testing

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

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

Tú no quieres ninguno.

path = ''/bla/bla/bla'' if path: print "True" else: print "False"