问题:isinstance(’aaa’,basestring)和isinstance(’aaa’,str)有什么区别?
a='aaaa'
print isinstance(a, basestring)#true
print isinstance(a, str)#true
回答 0
在3.0之前的Python版本中,有两种字符串:“普通字符串”和“ unicode字符串”。纯字符串(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
所有字符串都是基本字符串,但是unicode字符串不是str类型。尝试以下方法:
>>> a=u'aaaa'
>>> print isinstance(a, basestring)
True
>>> print isinstance(a, str)
False
回答 2
您真正要问的是basestring和str类之间的区别。
Str是从basestr继承的类。但是,如果您要创建unicode字符串,那么它也和其他字符串一样存在。
>>> a = u'aaaa'
>>> isinstance(a, str)
False
>>> isinstance(a, basestring)
True
回答 3
Basestring是字符串的超类。在您的示例中,a的类型为“ str”,因此它既是基本字符串,又是str