isinstance('aaa',basestring)和isinstance('aaa',str)有什么区别?

时间:2009-12-30 08:02:53

标签: python built-in-types

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

4 个答案:

答案 0 :(得分:366)

在3.0之前的Python版本中,有两种字符串“plain strings”和“unicode strings”。普通字符串(str)不能表示拉丁字母之外的字符(为简单起见,忽略代码页的详细信息)。 Unicode字符串(unicode)可以表示任何字母表中的字符,包括像Klingon这样的虚构字符。

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

3.0之前的Python字符串的继承层次结构是:

          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

答案 1 :(得分:8)

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

>>> a=u'aaaa'
>>> print isinstance(a, basestring)
True
>>> print isinstance(a, str)
False

答案 2 :(得分:4)

你真正要问的是basestring和str class之间的区别。

Str是一个继承自basetr的类。但是,如果你想制作一个字符串,也可以存在unicode字符串。

>>> a = u'aaaa'
>>> isinstance(a, str)
False
>>> isinstance(a, basestring)
True

答案 3 :(得分:1)

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

相关问题