Question

Je suis relativement nouveau dans Python et le codage. Je me débrouille bien jusqu'à ce que je tombe sur "aucun":

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

Bien qu'il semble simple, je ne peux pas comprendre pourquoi la boucle ci-dessus commence. Comment est None différent d'une chaîne vide? Je pensais qu'ils ont tous deux évalué à False.

Était-ce utile?

La solution

Ils évaluent tous les deux à False Mais cela ne signifie pas qu'ils sont la même chose.

None est une valeur distincte et il a son propre type. Une chaîne vide est une chaîne sans contenu:

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

Autres conseils

Non, None n'est que la même chose que None lui-même. Les cordes vides ne sont pas la même chose:

>>> None == ""
False

None est une valeur singleton spéciale (il n'y a qu'une seule copie de celle-ci dans une session Python) signifiant «vide», ou l'absence d'une valeur «appropriée». En tant que tel, c'est un drapeau ou signal évaluer; Python l'utilise par convention pour signaler qu'un processus n'a rien rendu, par exemple.

Tous les deux None et la chaîne vide est considérée comme fausse dans un contexte booléen:

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

Comme tous les conteneurs vides (comme un tuple vide, la liste ou le jeu) et le 0 numérique (que ce soit entier, point flottant ou un nombre complexe). Cependant, être considéré comme faux ne les rend pas égaux.

Si vous vouliez tester n'importe quel valeur fausse, utilisez:

while not variable:

comme not interprète l'opérande dans un contexte booléen et renvoie la valeur inverse:

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

Ils évaluent tous les deux en faux, mais sont différents lorsqu'ils sont utilisés dans une comparaison

if not None:
    print "Always true"
if not "":
    print "Always true"
if bool(None) == bool(""):
    print "Always true"
if None == "":
    pass
    #always false
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top