a='aaaa'
print isinstance(a, basestring)#true
print isinstance(a, str)#true
la source
a='aaaa'
print isinstance(a, basestring)#true
print isinstance(a, str)#true
Dans les versions Python antérieures à la 3.0, il existe deux types de chaînes "chaînes simples" et "chaînes unicode". Les chaînes simples ( str
) ne peuvent pas représenter des caractères en dehors de l'alphabet latin (en ignorant les détails des pages de codes pour plus de simplicité). Les chaînes Unicode ( unicode
) peuvent représenter des caractères de n'importe quel alphabet, y compris des caractères fictifs comme Klingon.
Alors pourquoi avoir deux types de chaînes, ne serait-il pas préférable d'avoir uniquement Unicode puisque cela couvrirait tous les cas? Eh bien, il est préférable d'avoir uniquement Unicode, mais Python a été créé avant Unicode était la méthode préférée pour représenter les chaînes. La transition du type chaîne dans un langage avec de nombreux utilisateurs prend du temps, en Python 3.0 c'est finalement le cas que toutes les chaînes sont Unicode.
La hiérarchie d'héritage des chaînes Python antérieures à 3.0 est:
object
|
|
basestring
/ \
/ \
str unicode
'basestring' introduit dans Python 2.3 peut être considéré comme une étape dans le sens de l'unification des chaînes car il peut être utilisé pour vérifier si un objet est une instance de str
ouunicode
>>> string1 = "I am a plain string"
>>> string2 = u"I am a unicode string"
>>> isinstance(string1, str)
True
>>> isinstance(string2, str)
False
>>> isinstance(string1, unicode)
False
>>> isinstance(string2, unicode)
True
>>> isinstance(string1, basestring)
True
>>> isinstance(string2, basestring)
True
str
etbyte
toujours enfants debasestring
? Cela vaudrait la peine d'ajouter une note à ce sujet.basestring
etstr
et lesbytes
deuxobject
directement. Mais notez que cela a du sens, puisque Py2str
n'est pas le même que Py3bytes
.basestring
doit être considéré comme une "chaîne de caractères", dont Py3 n'a que l'extensionstr
. Par conséquent, l'2to3
outil remplacebasestring
parstr
.Toutes les chaînes sont des chaînes de base, mais les chaînes Unicode ne sont pas de type str. Essayez plutôt ceci:
la source
Ce que vous demandez vraiment, c'est la différence entre la classe basestring et str.
Str est une classe qui hérite de basestr. Mais les chaînes Unicode existent également, comme d'autres, si vous vouliez en créer une.
la source
Basestring est la superclasse de la chaîne. Dans votre exemple, a est de type "str" donc, c'est à la fois une chaîne de base et un str
la source