В чем разница между isinstance('aaa', basestring) и isinstance('aaa', str)?
a='aaaa'
print isinstance(a, basestring)#true
print isinstance(a, str)#true
4 ответа:
в версиях Python до 3.0 есть два вида строк "простые строки"и" строки unicode". Простые строки (
str
) не может представлять символы вне латинского алфавита (игнорируя детали кодовых страниц для простоты). Строки Юникода (unicode
) может представлять символы из любого алфавита, включая некоторые вымышленные, такие как Клингон.так почему же два вида строк, не было бы лучше просто иметь Unicode, так как это будет охватывать все случаи? Ну это лучше иметь только Unicode, но Python был создан до того, как Unicode стал предпочтительным методом представления строк. Требуется время для перехода типа string на язык со многими пользователями, в 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
все строки являются базовыми, но строки unicode не имеют типа str. Попробуйте вместо этого:
>>> a=u'aaaa' >>> print isinstance(a, basestring) True >>> print isinstance(a, str) False