Python Cookbook学习记录 ch1_3_2013/10/21

1.3测试一个对象是否是字符串

如果让我写代码,第一反应肯定会采用书中提到的的槽糕的类型测试,使用type(),但是这可能导致Unicode码不能通过测试,甚至任何str子类都不行。

>>> def isExactlyAString(anobj):
    return type(anobj) is type('')

>>> print isExactlyAString('abc')
True
>>> print isExactlyAString(u'abc')
False

书中推荐方法如下

>>> def isAString(anobj):
    return isinstance(anobj,basestring)

>>> print isAString('abc')
True
>>> print isAString(u'abc')
True

 

 

isinstance是Python的内建函数,语法:

isinstance(object, classinfo)

如果参数object是classinfo的实例,或者object是classinfo类的子类的一个实例, 返回True。如果object不是一个给定类型的的对象, 则返回结果总是False

可以看到所有的string类型的都是基类basestring的实例或者子类的实例,所以无论是字符串还是Unicode都是返回True

 

但是isAString也不是完美的,对于Python标准库的UserString模块的UserString类实例的检查是无能无力的,主要原因是UserString不是从basestring派生出来的。

书中给出的解决方案是字符串都支持如下操作:

>>> def isStingLike(anobj):
    try:anobj+''
    except:return False
    else:return True

只要支持anobj+''此操作,就是字符串,否则就不是,但是这样子 效率比较低

 

 

 

 

 

 

posted on 2013-10-21 22:53  七海之风  阅读(210)  评论(0)    收藏  举报

导航