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+''此操作,就是字符串,否则就不是,但是这样子 效率比较低
浙公网安备 33010602011771号