what true the negar bool python boolean

the - true python



Diferencia entre “si x” y “si x no es ninguna” (5)

Parece que "si x" es casi como una mano corta para la sintaxis más larga de "si x no es Ninguno". ¿Son funcionalmente idénticos o hay casos en los que para un valor dado de x los dos evaluarían de manera diferente?

Supondría que el comportamiento también debería ser idéntico en todas las implementaciones de Python, pero si hay diferencias sutiles, sería bueno saberlo.


El primero prueba la veracidad, mientras que el último prueba la identidad con None . Muchos valores son falsos, como False , 0 , '''' y None , pero solo None es None .


En los siguientes casos:

test = False test = "" test = 0 test = 0.0 test = [] test = () test = {} test = set()

la prueba if diferirá:

if test: #False if test is not None: #True

Este es el caso porque is pruebas de identidad, es decir,

test is not None

es equivalente a

id(test) == id(None) #False

por lo tanto

(test is not None) is (id(test) != id(None)) #True


Todo en Python tiene un valor bool. Los valores son True, False, None.

todo es verdadero o falso

0 es falso

[], (), {}, '''' son falsos (todo está vacío)

[Falso], (''hola''), ''hola'', etc. son verdaderos (''porque no están vacíos)

Sólo Ninguno es Ninguno.

>>> x = None >>> if not x:print x #because bool(None) is False None >>> if x == None:print x None >>> x = False >>> if not x:print x False >>> if x == None:print x >>>

por último, tenga en cuenta que Verdadero y Falso son versiones "especiales" de 1 y 0 ... por ejemplo

>>>True + 1 2 >>>False + 1 1 >>>range(1, 5)[False] 1


if x: # Evaluates for any defined non-False value of x if not x: # Evaluates for any defined False value of x if x is None: # Evaluates for any instances of None

Ninguno es su propio tipo, que resulta ser Falso. "si no es x" evalúa si x = Ninguno, solo porque Ninguno es Falso.

No hay diferencias sutiles que conozca, pero existen métodos exactos para probar el uso de positividad / negatividad en situaciones exactas. Mezclarlos puede funcionar en algunas situaciones, pero puede llevar a problemas si no se entienden.

if x is True: # Use for checking for literal instances of True if x is False: # Use for checking for literal instances of False if x is None: # Use for checking for literal instances of None if x: # Use for checking for non-negative values if not x: # Use for checking for negative values # 0, "", None, False, [], (), {} are negative, all others are True


x = 0 if x: ... # False if x is not None: ... # True