Pregunta

Soy relativamente nuevo en Python y la codificación. Lo he estado haciendo bien hasta que he encontrado "ninguno":

variable = None                          
while variable != "":                    
    print("Why does this loop start?")

Si bien parece simple, no puedo comprender por qué comienza el bucle anterior. Como es None ¿Diferente a una cadena vacía? Pensé que ambos evaluaron a falsos.

¿Fue útil?

Solución

Ambos evalúan a False Pero eso no significa que sean lo mismo.

None es un valor separado y tiene su propio tipo. Una cadena vacía es una cadena sin contenido:

>>> type(None)
<type 'NoneType'>
>>> type('')
<type 'str'>
>>> bool(None) == bool('')
True
>>> None == ''
False

Otros consejos

No, None es solo lo mismo que None sí mismo. Las cadenas vacías no son lo mismo:

>>> None == ""
False

None es un valor especial singleton (solo hay una copia en una sesión de Python) que significa 'vacío', o la falta de un valor 'adecuado'. Como tal es un bandera o señal valor; Python lo usa por convención para indicar que un proceso no devolvió nada, por ejemplo.

Ambas cosas None y la cadena vacía se considera falsa en un contexto booleano:

>>> bool(None)
False
>>> bool("")
False

como son todos los contenedores vacíos (como una tupla vacía, lista o conjunto) y 0 numérico (ya sea entero, punto flotante o un número complejo). Sin embargo, ser considerado falso no los hace igual.

Si querías probar ningún valor que es falso, use:

while not variable:

como not Interpreta el operando en un contexto booleano y devuelve el valor inverso:

>>> not ""
True
>>> not None
True
>>> not "not empty"
False

Ambos evalúan en falso, pero son diferentes cuando se usan en una comparación

if not None:
    print "Always true"
if not "":
    print "Always true"
if bool(None) == bool(""):
    print "Always true"
if None == "":
    pass
    #always false
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top