a='aaaa'
print isinstance(a, basestring)#true
print isinstance(a, str)#true
quelle
a='aaaa'
print isinstance(a, basestring)#true
print isinstance(a, str)#true
In Python-Versionen vor 3.0 gibt es zwei Arten von Zeichenfolgen: "einfache Zeichenfolgen" und "Unicode-Zeichenfolgen". Einfache Zeichenfolgen ( str
) können keine Zeichen außerhalb des lateinischen Alphabets darstellen (der Einfachheit halber werden Details von Codepages ignoriert). Unicode-Zeichenfolgen ( unicode
) können Zeichen aus jedem Alphabet darstellen, einschließlich einiger fiktiver Zeichen wie Klingonisch.
Warum also zwei Arten von Zeichenfolgen, wäre es nicht besser, nur Unicode zu haben, da dies alle Fälle abdecken würde? Nun, es ist besser, nur Unicode zu haben, aber Python wurde erstellt, bevor Unicode die bevorzugte Methode zur Darstellung von Zeichenfolgen war. Es braucht Zeit, um den Zeichenfolgentyp in eine Sprache mit vielen Benutzern zu überführen. In Python 3.0 ist es schließlich so, dass alle Zeichenfolgen Unicode sind.
Die Vererbungshierarchie von Python-Strings vor 3.0 lautet:
object
|
|
basestring
/ \
/ \
str unicode
Der in Python 2.3 eingeführte 'basestring' kann als ein Schritt in Richtung der Vereinheitlichung von Zeichenfolgen angesehen werden, da damit überprüft werden kann, ob ein Objekt eine Instanz von str
oder istunicode
>>> 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
undbyte
noch Kinder vonbasestring
? Es lohnt sich, einen Hinweis dazu hinzuzufügen.basestring
undstr
undbytes
beide Unterklassenobject
direkt. Beachten Sie jedoch, dass dies sinnvoll ist, da Py2str
nicht mit Py3 identisch istbytes
.basestring
sollte als "Zeichenkette" betrachtet werden, von der Py3 nur die hatstr
. Daher ersetzt das2to3
Toolbasestring
durchstr
.Alle Zeichenfolgen sind Basestrings, aber Unicode-Zeichenfolgen sind nicht vom Typ str. Versuchen Sie stattdessen Folgendes:
quelle
Was Sie wirklich fragen, ist der Unterschied zwischen der Basis- und der Str-Klasse.
Str ist eine Klasse, die von basestr erbt. Es gibt aber auch Unicode-Zeichenfolgen, wie auch andere, wenn Sie eine erstellen möchten.
quelle
Basestring ist die Oberklasse der Saiten. In Ihrem Beispiel ist a vom Typ "str", es ist also sowohl ein Basisring als auch ein str
quelle