a='aaaa'
print isinstance(a, basestring)#true
print isinstance(a, str)#true
źródło
a='aaaa'
print isinstance(a, basestring)#true
print isinstance(a, str)#true
W wersjach Pythona wcześniejszych niż 3.0 istnieją dwa rodzaje ciągów „zwykłe ciągi” i „ciągi znaków Unicode”. Zwykłe łańcuchy ( str
) nie mogą reprezentować znaków spoza alfabetu łacińskiego (dla uproszczenia ignorujemy szczegóły stron kodowych). Ciągi Unicode ( unicode
) mogą reprezentować znaki z dowolnego alfabetu, w tym niektóre fikcyjne, takie jak Klingon.
Dlaczego więc mieć dwa rodzaje ciągów, czy nie byłoby lepiej mieć po prostu Unicode, skoro obejmowałby on wszystkie przypadki? Cóż, lepiej jest mieć tylko Unicode, ale Python został stworzony, zanim Unicode był preferowaną metodą reprezentowania łańcuchów. Zmiana typu łańcucha na język, w którym jest wielu użytkowników, zajmuje trochę czasu, w Pythonie 3.0 ostatecznie jest tak, że wszystkie łańcuchy są Unicode.
Hierarchia dziedziczenia ciągów znaków Pythona w wersjach wcześniejszych niż 3.0 to:
object
|
|
basestring
/ \
/ \
str unicode
„basestring” wprowadzony w Pythonie 2.3 może być traktowany jako krok w kierunku unifikacji ciągów, ponieważ może być używany do sprawdzania, czy obiekt jest instancją str
lubunicode
>>> 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
ibyte
wciąż dziecibasestring
? Warto byłoby dodać uwagę na ten temat.basestring
astr
ibytes
zarówno podklasęobject
bezpośrednio. Ale zauważ, że ma to sens, ponieważ Py2str
to nie to samo co Py3bytes
.basestring
należy traktować jako „ciąg znaków”, którego Py3 ma tylko rozszerzeniestr
. Stąd2to3
narzędzie zastępujebasestring
sięstr
.Wszystkie stringi są basestringami, ale stringi Unicode nie są typu str. Spróbuj tego zamiast tego:
źródło
Naprawdę pytasz o różnicę między klasą basestring i str.
Str to klasa, która dziedziczy po basestr. Ale istnieją również ciągi znaków Unicode, podobnie jak inne, jeśli chcesz je utworzyć.
źródło
Basestring to superklasa strun. W twoim przykładzie a jest typu „str”, więc jest zarówno basestringiem, jak i str
źródło