164
a='aaaa'
print isinstance(a, basestring)#true
print isinstance(a, str)#true
4

4 回答 4

398

在 3.0 之前的 Python 版本中,有两种字符串“纯字符串”和“Unicode 字符串”。纯字符串 ( str) 不能表示拉丁字母以外的字符(为简单起见,忽略代码页的细节)。Unicode 字符串 ( unicode) 可以表示任何字母表中的字符,包括一些虚构的字符,如克林贡语。

那么为什么有两种字符串,难道只有 Unicode 会更好,因为它会涵盖所有情况吗?好吧,最好只有 Unicode,但 Python 是在 Unicode 成为表示字符串的首选方法之前创建的。在具有许多用户的语言中转换字符串类型需要时间,在 Python 3.0 中,最终所有字符串都是 Unicode。

Python 字符串 pre-3.0 的继承层次是:

          object
             |
             |
         basestring
            / \
           /   \
         str  unicode

Python 2.3 中引入的 'basestring' 可以被认为是朝着字符串统一方向迈出的一步,因为它可以用来检查对象是否strunicode

>>> 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
于 2009-12-30T08:42:08.843 回答
8

所有字符串都是基本字符串,但 unicode 字符串不是 str 类型。试试这个:

>>> a=u'aaaa'
>>> print isinstance(a, basestring)
True
>>> print isinstance(a, str)
False
于 2009-12-30T08:05:41.383 回答
4

您真正要问的是 basestring 和 str 类之间的区别。

Str 是一个继承自 basestr 的类。但是如果你想制作一个,也存在 unicode 字符串,就像其他字符串一样。

>>> a = u'aaaa'
>>> isinstance(a, str)
False
>>> isinstance(a, basestring)
True
于 2009-12-30T08:07:13.330 回答
1

Basestring 是字符串的超类。在您的示例中, a 的类型为“str”,因此它既是基本字符串,又是 str

于 2009-12-30T08:06:55.500 回答