Domanda

Sono relativamente nuovo per Python e codifica. Ho fatto bene fino a quando non mi sono imbattuto in "Nessuno":

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

Anche se sembra semplice, non riesco a capire perché inizi il loop sopra. Com'è None diverso da una stringa vuota? Pensavo che entrambi valutassero a False.

È stato utile?

Soluzione

Entrambi valutano False Ma ciò non significa che siano la stessa cosa.

None è un valore separato e ha il suo tipo. Una stringa vuota è una stringa senza contenuto:

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

Altri suggerimenti

No, None è solo la stessa cosa di None si. Le stringhe vuote non sono la stessa cosa:

>>> None == ""
False

None è un valore speciale singleton (c'è solo una copia in una sessione di Python) che significa "vuoto" o la mancanza di un valore "corretto". In quanto tale è un bandiera o segnale valore; Python lo usa per convenzione per segnalare che un processo non ha restituito nulla, per esempio.

Tutti e due None E la stringa vuota è considerata falsa in un contesto booleano:

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

Come tutti i contenitori vuoti (come una tupla vuota, elenco o set) e numerico 0 (sia esso intero, punto galleggiante o un numero complesso). Essere considerati falsi non li rende uguali, tuttavia.

Se volevi testare qualunque valore falso, usa:

while not variable:

come not interpreta l'operando in un contesto booleano e restituisce il valore inverso:

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

Entrambi valutano a false, ma sono diversi se usati in un confronto

if not None:
    print "Always true"
if not "":
    print "Always true"
if bool(None) == bool(""):
    print "Always true"
if None == "":
    pass
    #always false
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top