isinstance(’aaa’,basestring)和isinstance(’aaa’,str)之间有什么区别?

问题:

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

回答:

在3.0之前的Python版本中,有两种字符串“plain strings”和“unicode strings”。纯字符串(str)不能表示拉丁字母之外的字符(为了简单起见,忽略代码页的详细信息)。 Unicode字符串(unicode)可以表示来自任何字母的字符,包括像克林贡这样的虚构字符串。
那么为什么要有两种字符串,那么只要使用Unicode就不会更好,因为这样会覆盖所有的情况?那么最好只有Unicode,而Python是在Unicode是表示字符串的首选方法之前创建的。在使用许多用户的语言中转换字符串类型需要时间,在Python 3.0中,最后是所有字符串都是Unicode。
3.0之前的Python字符串的继承层次结构是:

          object
             |
             |
         basestring
            / \
           /   \
         str  unicode

在Python 2.3中引入的“basestring”可以被认为是字符串统一方向的一个步骤,因为它可以用于检查对象是否为strunicode的实例,

>>> 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

 
 
Code问答: http://codewenda.com/topics/python/
Stackoverflow: What is the difference between isinstance(‘aaa’, basestring) and isinstance(‘aaa’, str)?

*转载请注明本文链接以及stackoverflow的英文链接

发表评论

电子邮件地址不会被公开。 必填项已用*标注

− 4 = 1