¿Qué es la verdad y la mentira? ¿En qué se diferencia de Verdadero y Falso?
Acabo de enterarme de que hay valores verdaderos y falsos en Python que son diferentes de los valores normales True
y False
.
¿ Alguien puede explicar en profundidad qué son los valores verdaderos y falsos ? ¿Dónde debería usarlos? ¿ Cuál es la diferencia entre verdad y True
valores y falsedad y False
valores?
Ver también:
* ¿Cómo actúan "y" y "o" con valores no booleanos?
* Identidad booleana == Verdadero vs es Verdadero
* Valor booleano de objetos en Python
Usamos "verdadero" y "falso" para diferenciarnos de los bool
valores True
y False
. Un valor "veraz" satisfará la verificación realizada por las declaraciones if
o while
. Como se explica en la documentación , todos los valores se consideran "verdaderos", excepto los siguientes, que son "falsos":
None
False
- Números que son numéricamente iguales a cero, incluidos:
0
0.0
0j
decimal.Decimal(0)
fraction.Fraction(0, 1)
- Secuencias y colecciones vacías, que incluyen:
[]
- un vacíolist
{}
- un vacíodict
()
- un vacíotuple
set()
- un vacíoset
''
- un vacíostr
b''
- un vacíobytes
bytearray(b'')
- un vacíobytearray
memoryview(b'')
- un vacíomemoryview
- un vacío
range
, comorange(0)
- objetos para los cuales
obj.__bool__()
devolucionesFalse
obj.__len__()
devuelve0
, dado queobj.__bool__
no está definido
Como se describe en los comentarios, solo se refiere a valores que se evalúan como Verdadero o Falso.
Por ejemplo, para ver si una lista no está vacía, en lugar de verificar así:
if len(my_list) != 0:
print("Not empty!")
Simplemente puedes hacer esto:
if my_list:
print("Not empty!")
Esto se debe a que algunos valores, como las listas vacías, se consideran falsos cuando se evalúan para un valor booleano. Las listas no vacías son verdaderas.
De manera similar, para el número entero 0, la cadena vacía "", y así sucesivamente, para Falso, y los enteros distintos de cero, cadenas no vacías, etc., para Verdadero.
La idea de términos como "verdadero" y "falso" simplemente se refiere a aquellos valores que se consideran Verdaderos en casos como los descritos anteriormente, y aquellos que se consideran Falso.
Por ejemplo, una lista vacía ( []
) se considera "falsa" y una lista no vacía (por ejemplo, [1]
) se considera "veraz".
Consulte también esta sección de la documentación .
Python determina la veracidad aplicándolo bool()
al tipo, que devuelve True
o False
que se usa en una expresión como if
o while
.
A continuación se muestra un ejemplo de una clase personalizada Vector2d
y su instancia regresa False
cuando la magnitud (longitud de un vector) es 0; de lo contrario True
.
import math
class Vector2d(object):
def __init__(self, x, y):
self.x = float(x)
self.y = float(y)
def __abs__(self):
return math.hypot(self.x, self.y)
def __bool__(self):
return bool(abs(self))
a = Vector2d(0,0)
print(bool(a)) #False
b = Vector2d(10,0)
print(bool(b)) #True
Nota: Si no lo hubiéramos definido, __bool__
siempre devolvería Verdadero, ya que las instancias de una clase definida por el usuario se consideran verdaderas de forma predeterminada.
Ejemplo del libro: "Programación fluida en Python, clara, concisa y eficaz"