Quelle est la différence entre isinstance('aaa', basestring) et isinstance ("aaa", str)?
a='aaaa'
print isinstance(a, basestring)#true
print isinstance(a, str)#true
Vous devez vous connecter pour publier un commentaire.
a='aaaa'
print isinstance(a, basestring)#true
print isinstance(a, str)#true
Vous devez vous connecter pour publier un commentaire.
Dans les versions de Python antérieures à la version 3.0, il y a deux types de chaînes "de la plaine des chaînes" et "unicode". Plaine des chaînes de caractères (
str
) ne peut pas représenter les caractères en dehors de l'alphabet Latin (en ignorant les détails de pages de code pour des raisons de simplicité). Des chaînes Unicode (unicode
) peuvent représenter des caractères à partir de l'alphabet, y compris certains de fiction, comme le Klingon.Alors pourquoi avoir deux types de chaînes, ne serait-il pas mieux d'avoir de l'Unicode depuis qui permettrait de couvrir tous les cas? Eh bien, c'est mieux n'avoir qu'Unicode mais Python a été créé avant l'Unicode a été la méthode privilégiée pour représenter des chaînes de caractères. Il prend le temps de transition de type chaîne de caractères dans une langue avec de nombreux utilisateurs, en Python 3.0 c'est enfin le cas que toutes les chaînes sont en Unicode.
La hiérarchie d'héritage de Python chaînes pré-3.0 est:
'basestring" mis en œuvre en Python 2.3 peut être considéré comme une étape dans la direction de la chaîne de l'unification, car il peut être utilisé pour vérifier si un objet est une instance de
str
ouunicode
str
etbyte
encore des enfants debasestring
? Serait intéressant d'ajouter une note à ce sujet.basestring
etstr
etbytes
les deux sous-classeobject
directement. Mais notez que cela a du sens, puisque Py2str
n'est pas le même que Py3bytes
.basestring
doivent être considérés comme de la "chaîne de caractères", dont Py3 seulement lestr
. D'où la2to3
outil remplacebasestring
avecstr
.Toutes les chaînes sont basestrings, mais des chaînes unicode ne sont pas de type str. Essayez plutôt ceci:
Vraiment ce que vous me demandez, c'est la différence entre le basestring et str classe.
Str est une classe qui hérite de basestr. Mais des chaînes unicode existent également, comme en d'autres, si vous voulais faire un.
Basestring est la superclasse de la chaîne. Dans votre exemple, un est de type "str" ainsi, il est à la fois un basestring, et un str