isinstance('aaa',basestring)和isinstance('aaa',str)有什么区别?

2024-09-29 02:25:03 发布

您现在位置:Python中文网/ 问答频道 /正文

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

Tags: trueisinstanceprintstraaaabasestring
3条回答

在3.0之前的Python版本中,有两种字符串“普通字符串”和“unicode字符串”。纯字符串(str)不能表示拉丁字母表以外的字符(为了简单起见,忽略代码页的详细信息)。Unicode字符串(unicode)可以表示任何字母表中的字符,包括一些虚构的字符,如克林贡语。

那么,为什么有两种字符串呢?既然Unicode可以覆盖所有的情况,那么使用Unicode是否更好呢?最好只有Unicode,但Python是在Unicode是表示字符串的首选方法之前创建的。在一种有许多用户的语言中转换字符串类型需要时间,在Python3.0中,最终所有字符串都是Unicode。

Python strings pre-3.0的继承层次结构是:

          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

所有字符串都是基字符串,但unicode字符串不是str类型。请改为:

>>> a=u'aaaa'
>>> print isinstance(a, basestring)
True
>>> print isinstance(a, str)
False

你真正要问的是basestring和str类之间的区别。

Str是从basestr继承的类。但是unicode字符串也存在,其他字符串也存在,如果您想创建一个字符串的话。

>>> a = u'aaaa'
>>> isinstance(a, str)
False
>>> isinstance(a, basestring)
True

相关问题 更多 >