您的位置:首页 > 编程语言 > Python开发

Python Cookbook学习记录 ch1_3_2013/10/21

2013-10-21 22:53 549 查看
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+''此操作,就是字符串,否则就不是,但是这样子 效率比较低
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: