Ответ 1
В версиях Python до 3.0 существует два типа строк: "простые строки" и "строки Unicode". Обычные строки (str
) не могут представлять символы за пределами латинского алфавита (для простоты игнорирования деталей кодовых страниц). Строки Unicode (unicode
) могут представлять символы из любого алфавита, включая некоторые вымышленные, такие как Klingon.
Итак, почему есть два типа строк, не лучше ли было бы иметь Юникод, поскольку это будет охватывать все случаи? Ну, лучше иметь только Unicode, но Python был создан до того, как Unicode стал предпочтительным методом представления строк. Требуется время, чтобы перевести тип строки на языке со многими пользователями, в Python 3.0, наконец, все строки являются Unicode.
Иерархия наследования строк Python pre-3.0:
object
|
|
basestring
/ \
/ \
str unicode
'basestring', введенный в Python 2.3, можно рассматривать как шаг в направлении объединения строк, поскольку он может использоваться для проверки того, является ли объект экземпляром str
или 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