2016-04-08 8 views

Répondre

3

Parce que == ne vérifie pas la véracité, il vérifie l'égalité. Ces deux objets sont de types différents, donc ils ne sont pas égaux.

Si vous voulez voir explicitement la truthiness d'un objet, le convertir en bool:

>>> bool([]) 
False 

Notez que vous ne faites jamais dans votre code, parce que le point de truthiness est que la conversion est implict. Au contraire, vous feriez:

if my_value: 
    ...do something... 
+2

« Les deux objets sont de types différents, donc ils ne sont pas égaux "Cependant, c'est un peu plus complexe que ça. Par exemple. si vous déclarez votre propre classe avec 'def __eq __ (self, other): return True' alors les instances de cette classe seront égales à tout autre objet (?). –

+0

Donc, l'instruction 'if' applique-t-elle implicitement cette conversion à' bool' par elle-même? Si oui, pourquoi n'applique-t-il pas la même conversion dans 'if [] == False'? Considérant que '[]' est interprété comme 'False' et' == 'vérifie l'égalité des valeurs, ne devrait-il pas retourner' True'? – chaudharyp

+0

'[]' n'est ** absolument pas ** interprété comme False, ce qui n'est tout simplement pas vrai. C'est faux dans un contexte booléen, c'est tout. –

-2

parce == l'égalité des rendements si l'objet est égal à un autre ...

dans ce cas [] Aucun isnt juste un tableau vide par exemple:

if variable: 
    print "true" 
else: 
    print "false" 

si la variable est une chaîne vide ('') ou un tableau vide ([]), ceci affiche false.

if variable == None: 
    print "true" 
else: 
    print "false" 

si la variable est une chaîne vide ('') ou un tableau vide ([]) Ceci affiche Fasle, parce que son pas de type Aucun (son type correspond à str ou liste).

==: retourne vrai si 2 variables sont égales

si: retourne vrai si la variable est None et n'ist instance vide (comme tableau vide ou chaîne)