What is the difference between isinstance('aaa', basestring) and isinstance('aaa', str)?
1 2 3 | a='aaaa' print isinstance(a, basestring)#true print isinstance(a, str)#true |
在3.0之前的Python版本中,有两种字符串:"纯字符串"和"Unicode字符串"。纯字符串(
那么为什么有两种类型的字符串呢,仅仅使用unicode会更好吗,因为它可以覆盖所有的情况?好吧,最好只有unicode,但python是在unicode成为表示字符串的首选方法之前创建的。在有许多用户的语言中转换字符串类型需要时间,在Python3.0中,所有字符串最终都是Unicode。
python字符串pre-3.0的继承层次结构是:
1 2 3 4 5 6 7 | object | | basestring / \ / \ str unicode |
python 2.3中引入的"basestring"可以看作是向字符串统一方向迈出的一步,因为它可以用来检查对象是
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | >>> 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 |
所有字符串都是基字符串,但Unicode字符串不是str类型。请尝试以下操作:
1 2 3 4 5 | >>> a=u'aaaa' >>> print isinstance(a, basestring) True >>> print isinstance(a, str) False |
你真正要问的是basestring和str类之间的区别。
str是从basestr继承的类。但是,如果您想创建一个Unicode字符串,其他字符串也会存在。
1 2 3 4 5 | >>> a = u'aaaa' >>> isinstance(a, str) False >>> isinstance(a, basestring) True |
basestring是字符串的超类。在您的示例中,a的类型为"str",因此它既是basestring,又是str。