isinstance('aaa', basestring)和isinstance('aaa', str)有什么区别?
在编程中,有时候我们需要让程序在特定的条件下执行某些操作。比如说,当用户点击一个按钮时,程序就会做出反应。这种情况我们通常会用“事件”来处理。
事件就像是程序中的一个信号,告诉程序发生了什么事情。比如,用户点击了按钮、输入了文字或者移动了鼠标。程序可以根据这些事件来决定接下来要做什么。
为了让程序能够响应这些事件,我们需要给它设置一些“监听器”。监听器就像是一个守卫,时刻关注着这些事件的发生。一旦有事件发生,监听器就会立刻通知程序去执行相应的操作。
总的来说,事件和监听器的结合让我们的程序变得更加互动和智能,能够根据用户的操作做出反应。
a='aaaa'
print isinstance(a, basestring)#true
print isinstance(a, str)#true
4 个回答
其实你问的就是 basestring 和 str 这两个类的区别。
str 是一个从 basestr 继承来的类。不过,还有 unicode 字符串这种类型,如果你想的话,也可以自己创建其他类型的字符串。
>>> a = u'aaaa'
>>> isinstance(a, str)
False
>>> isinstance(a, basestring)
True
所有的字符串都是基础字符串,但Unicode字符串不是类型为str的。你可以试试这个:
>>> a=u'aaaa'
>>> print isinstance(a, basestring)
True
>>> print isinstance(a, str)
False
在Python 3.0之前,有两种类型的字符串:“普通字符串”和“Unicode字符串”。普通字符串(str
)只能表示拉丁字母表中的字符(为了简单起见,这里不讨论编码细节)。而Unicode字符串(unicode
)可以表示任何字母表中的字符,包括一些虚构的字符,比如克林贡语。
那么,为什么要有两种字符串呢?难道只用Unicode不更好吗?其实,使用Unicode确实更好,但Python是在Unicode成为表示字符串的主流方法之前创建的。要在一个有很多用户的编程语言中改变字符串类型是需要时间的。在Python 3.0中,终于所有字符串都统一为Unicode了。
在Python 3.0之前,字符串的继承结构是这样的:
object
|
|
basestring
/ \
/ \
str unicode
在Python 2.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