首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >isinstance('aaa',basestring)和isinstance('aaa',str)有什么区别?

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

Stack Overflow用户
提问于 2009-12-30 16:02:53
回答 4查看 83.9K关注 0票数 164
a='aaaa'
print isinstance(a, basestring)#true
print isinstance(a, str)#true
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-12-30 16:42:09

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

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

Python字符串3.0之前版本的继承层次结构是:

          object
             |
             |
         basestring
            / \
           /   \
         str  unicode

Python2.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
票数 398
EN

Stack Overflow用户

发布于 2009-12-30 16:05:41

所有字符串都是基字符串,但unicode字符串不是str类型。试着这样做:

>>> a=u'aaaa'
>>> print isinstance(a, basestring)
True
>>> print isinstance(a, str)
False
票数 8
EN

Stack Overflow用户

发布于 2009-12-30 16:07:13

实际上,您要问的是basestring和str类之间的区别。

Str是一个继承自basestr的类。但是unicode字符串也存在,就像其他字符串一样,如果您想创建一个这样的字符串。

>>> a = u'aaaa'
>>> isinstance(a, str)
False
>>> isinstance(a, basestring)
True
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1979004

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档