zjm*_*126 156 python built-in-types
a='aaaa'
print isinstance(a, basestring)#true
print isinstance(a, str)#true
Run Code Online (Sandbox Code Playgroud)
Ten*_*she 381
在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
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
所有字符串都是basetrings,但是unicode字符串不是str类型.试试这个:
>>> a=u'aaaa'
>>> print isinstance(a, basestring)
True
>>> print isinstance(a, str)
False
Run Code Online (Sandbox Code Playgroud)