问题描述
a='aaaa'
print isinstance(a, basestring)#true
print isinstance(a, str)#true
推荐答案
在3.0之前的Python版本中,有两种字符串:普通字符串"和"unicode字符串".纯字符串(str
)不能表示拉丁字母之外的字符(为简单起见,忽略代码页的详细信息). Unicode字符串(unicode
)可以表示任何字母的字符,包括虚构的字符,例如Klingon.
In Python versions prior to 3.0 there are two kinds of strings "plain strings" and "unicode strings". Plain strings (str
) cannot represent characters outside of the Latin alphabet (ignoring details of code pages for simplicity). Unicode strings (unicode
) can represent characters from any alphabet including some fictional ones like Klingon.
那么,为什么要使用两种字符串,仅使用Unicode会更好,因为这将涵盖所有情况?最好只使用Unicode,但是在Unicode是表示字符串的首选方法之前创建了Python.在具有许多用户的语言中转换字符串类型需要花费时间,在Python 3.0中,最终所有字符串都是Unicode的情况.
So why have two kinds of strings, would it not be better to just have Unicode since that would cover all the cases? Well it is better to have only Unicode but Python was created before Unicode was the preferred method for representing strings. It takes time to transition the string type in a language with many users, in Python 3.0 it is finally the case that all strings are Unicode.
3.0之前的Python字符串的继承层次为:
The inheritance hierarchy of Python strings pre-3.0 is:
object
|
|
basestring
/ \
/ \
str unicode
可以将Python 2.3中引入的
'basestring'视为朝着字符串统一方向迈出的一步,因为它可用于检查对象是str
还是unicode
'basestring' introduced in Python 2.3 can be thought of as a step in the direction of string unification as it can be used to check whether an object is an instance of str
or 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
这篇关于isinstance('aaa',basestring)和isinstance('aaa',str)有什么区别?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!