a='aaaa'
print isinstance(a, basestring)#true
print isinstance(a, str)#true
答案 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中引入的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