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

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

在3.0以前的Python版本中,有两种string“普通string”和“unicodestring”。 简单string( str )不能表示拉丁字母外的字符(为简单起见,忽略代码页的细节)。 Unicodestring( unicode )可以表示任何字母表中的字符,包括像克林贡这样的虚构字符。

那么为什么有两种string呢,只要有Unicode就不是更好,因为它涵盖了所有的情况? 那么最好只有Unicode,但是在Unicode是表示string的首选方法之前创build了Python。 用许多用户的语言来转换stringtypes需要时间,在Python 3.0中,所有string都是Unicode。

Python 3.0版之前的inheritance层次是:

  object | | basestring / \ / \ str unicode 

Python 2.3中引入的“basestring”可以被认为是string统一方向的一个步骤,因为它可以用来检查一个对象是一个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 

所有string都是碱基string,但unicodestring不是strtypes。 试试这个:

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

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

Str是一个inheritance自basestr的类。 但是,也可以使用unicodestring,如果要制作一个string,也可以使用其他string。

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

基础string是string的超类。 在你的例子中,a的types是“str”,因此它既是基础string也是str