a='aaaa' print isinstance(a, basestring)#true print isinstance(a, str)#true
所有字符串都是基本字符串,但 unicode 字符串不是 str 类型:
>>> a=u'aaaa' >>> print isinstance(a, basestring) True >>> print isinstance(a, str) False
Basestring 是 string 的超类。在您的示例中,a 是“ str”类型,因此它既是基字符串,也是 str
实际上,您要问的是基字符串和 str 类之间的区别。
Str 是从 basestr 继承的类。但是 Unicode 字符串也是存在的,如果您想创建一个 Unicode 字符串,其他字符串也可以存在。
>>> a = u'aaaa' >>> isinstance(a, str) False >>> isinstance(a, basestring) True
在3.0之前的 Python 版本中,有两种字符串“普通字符串”和“ unicode 字符串”。简单字符串(str)不能表示拉丁字母表之外的字符(为简单起见,忽略代码页的细节)。Unicode 字符串(unicode)可以表示任何字母表中的字符,包括一些虚构的字符,如克林贡字符。
str
unicode
那么为什么要使用两种字符串呢? 使用 Unicode 不是更好吗? 因为它可以覆盖所有的情况?最好只有 Unicode,但 Python 是在 Unicode 成为表示字符串的首选方法之前创建的。在许多用户的语言中转换字符串类型需要时间,在 Python 3.0中,最终所有字符串都是 Unicode。
Python 字符串 pre-3.0的继承层次结构是:
object | | basestring / \ / \ str unicode
Python 2.3中引入的“ basestring”可以被看作是字符串统一方向的一个步骤,因为它可以用来检查一个对象是 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