a='aaaa'
print isinstance(a, basestring)#true
print isinstance(a, str)#true
Réponses
Trop de publicités?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 avez 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 de caractères Unicode.
La hiérarchie d'héritage de Python chaînes pré-3.0 est:
object
|
|
basestring
/ \
/ \
str unicode
'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 d' str
ou unicode
>>> 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