Comme tout programmeur Python le sait, vous devez utiliser ==
au lieu de is
pour comparer deux chaînes pour l'égalité. Cependant, y a-t-il réellement des cas où (s is "")
et (s == "")
donneront des résultats différents dans Python 2.6.2?Can (s est "") et (s == "") donnent jamais des résultats différents dans Python 2.6.2?
Je suis récemment tombé sur du code qui utilisait (s is "")
dans la revue de code, et tout en soulignant que c'était incorrect, je voulais donner un exemple de comment cela pourrait échouer. Mais essaye comme je pourrais, je ne peux pas construire deux chaînes vides avec des identités différentes. Il semble que l'implémentation de Python doit faire un cas particulier de la chaîne vide dans beaucoup d'opérations communes. Par exemple:
>>> a = ""
>>> b = "abc"[ 2:2 ]
>>> c = ''.join([])
>>> d = re.match('()', 'abc').group(1)
>>> e = a + b + c + d
>>> a is b is c is d is e
True
Cependant, this question suggère qu'il y sont cas où (s is "")
et (s == "")
peuvent être différents. Quelqu'un peut-il me donner un exemple?
Cela permet cependant de tester deux types d'objets chaîne différents, 'str' et' unicode'. La question subsiste quand s est du même type, ou si vous utilisez Python 3 dans lequel il n'y a plus d'objet explicite 'unicode'. – poke
@poke, La question est explicitement centrée sur Python 2.6.2 et non sur Python 3. – zoli2k
C'est vrai, mais c'est une distinction importante à faire et ce n'est probablement pas la façon la plus amicale de le faire. Quel test était réellement signifié par ce code? Que «la chose passée était équivalente à une chaîne vide» ou que «la chose passée était de type str et vide»? Imo si c'était le dernier alors un test de type explicite serait plus convivial pour les futurs responsables et utilisateurs. – pycruft