Answers:
在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
basestring
和str
和bytes
两个子类object
直接。但是请注意,这是有道理的,因为Py2 str
与Py3不同bytes
。basestring
应该被认为是“字符串”,其中Py3仅具有str
。因此,该2to3
工具将替换basestring
为str
。
str
和byte
仍然是的孩子basestring
吗?值得为此添加注释。