python - lenguaje - ¿Qué es la verdad y la falsa? ¿Cómo es diferente de verdadero y falso?
python tutorial (4)
¿Acabo de saber que hay valores de
True
y
False
en Python que son diferentes de los valores
True
y
False
normales?
¿Alguien puede explicar en profundidad qué son los valores de verdad y falsedad ?
¿Dónde debería usarlos?
¿Cuál es la diferencia entre
verdad
y valores
True
y
falso
y valores
False
?
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 entero 0, la cadena vacía "", y así sucesivamente, para enteros falsos y no distintos de cero, cadenas no vacías, etc., para verdadero.
La idea de términos como "verdad" y "falsedad" simplemente se refiere a aquellos valores que se consideran verdaderos en casos como los descritos anteriormente y aquellos que se consideran falsos.
Por ejemplo, una lista vacía (
[]
) se considera "falsa" y una lista no vacía (por ejemplo,
[1]
) se considera "verdadera".
Vea también esta sección de la documentación .
Los valores de verdad se refieren a los objetos utilizados en un contexto booleano y no tanto al valor booleano que devuelve verdadero o falso. Tómelos como ejemplo:
>>> bool([])
False
>>> bool([1])
True
>>> bool('''')
False
>>> bool(''hello'')
True
Python determina la veracidad aplicando
bool()
al tipo, que devuelve
True
o
False
que se usa en una expresión como
if
o
while
.
Aquí hay un ejemplo para una clase personalizada
Vector2d
y su instancia devuelve
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 hubiéramos definido
__bool__
, siempre devolvería True, ya que las instancias de una clase definida por el usuario se consideran verdaderas por defecto.
Ejemplo del libro: "Fluidez en Python, programación clara, concisa y efectiva"
Todos los valores se consideran "verdaderos", excepto los siguientes, que son "falsos":
-
None
-
False
-
0
-
0.0
-
0j
-
Decimal(0)
-
Fraction(0, 1)
-
[]
- unalist
vacía -
{}
- undict
vacío -
()
- unatuple
vacía -
''''
- unstr
vacío -
b''''
- unbytes
vacío -
set()
- unset
vacío -
un
range
vacío, como elrange(0)
-
objetos para los cuales
-
obj.__bool__()
devuelveFalse
-
obj.__len__()
devuelve0
-
Un valor "verdadero" satisfará la verificación realizada por las declaraciones
if
o
while
.
Usamos "verdad" y "falsedad" para diferenciarnos de los valores
bool
True
y
False
.