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

166 投票
4 回答
92530 浏览
提问于 2025-04-15 17:28

在编程中,有时候我们需要让程序在特定的条件下执行某些操作。比如说,当用户点击一个按钮时,程序就会做出反应。这种情况我们通常会用“事件”来处理。

事件就像是程序中的一个信号,告诉程序发生了什么事情。比如,用户点击了按钮、输入了文字或者移动了鼠标。程序可以根据这些事件来决定接下来要做什么。

为了让程序能够响应这些事件,我们需要给它设置一些“监听器”。监听器就像是一个守卫,时刻关注着这些事件的发生。一旦有事件发生,监听器就会立刻通知程序去执行相应的操作。

总的来说,事件和监听器的结合让我们的程序变得更加互动和智能,能够根据用户的操作做出反应。

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

4 个回答

4

其实你问的就是 basestring 和 str 这两个类的区别。

str 是一个从 basestr 继承来的类。不过,还有 unicode 字符串这种类型,如果你想的话,也可以自己创建其他类型的字符串。

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

所有的字符串都是基础字符串,但Unicode字符串不是类型为str的。你可以试试这个:

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

在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

撰写回答