玩转python之测试一个对象是否是类字符串
2014-08-18 15:48
435 查看
提到类型测试,我首先想到python中“鸭子类型”的特点,所谓鸭子类型,即如果它走路像鸭子,叫声也像鸭子,
那么对于我们的应用而言,就可以认为它是鸭子了!这一切都是为了功能复用。
我们总是需要测试一个对象,尤其是当写一个函数或者方法时,经常需要测试传入的参数是否是一个字符串;
下面这个方法利用了内建的isinstance和basestring来简单快速检查某个对象是否是字符串或者Unicode对象:
def is_string(anobj):
return isinstance(anobj, basestring)
很多人看到这个方法会提出质疑,并用下面的方法代替之,但很遗憾,下面的方法有严重漏洞:
def is_string(anobj):
return type(anobj) is type(' ')
python强大力量的源泉——平滑的、基于签名的多态机制告诉我们,这个方法很糟糕,很明显,Unicode对象
便无法通过这个测试,更不用提用户自己编写的str子类了;
而使用isinstance和basestring的方法则要好很多,因为str和Unicode有共同的基类;但仍有漏网之鱼:
UserString模块提供的UserString类,就不适用以上方法;
这忽然让我想起了一个著名的处理问题方式,同时也是try/except工具的保证:获得事后原谅总是比获得事前许可,
要容易的多(EAFP);所以,也许我们可以自己做些什么:
def islikestring(anobj):
try: anobj + ' '
except: return False
else: return True
关键词:鸭子判断法、EAFP、isinstance、basestring
那么对于我们的应用而言,就可以认为它是鸭子了!这一切都是为了功能复用。
我们总是需要测试一个对象,尤其是当写一个函数或者方法时,经常需要测试传入的参数是否是一个字符串;
下面这个方法利用了内建的isinstance和basestring来简单快速检查某个对象是否是字符串或者Unicode对象:
def is_string(anobj):
return isinstance(anobj, basestring)
很多人看到这个方法会提出质疑,并用下面的方法代替之,但很遗憾,下面的方法有严重漏洞:
def is_string(anobj):
return type(anobj) is type(' ')
python强大力量的源泉——平滑的、基于签名的多态机制告诉我们,这个方法很糟糕,很明显,Unicode对象
便无法通过这个测试,更不用提用户自己编写的str子类了;
而使用isinstance和basestring的方法则要好很多,因为str和Unicode有共同的基类;但仍有漏网之鱼:
UserString模块提供的UserString类,就不适用以上方法;
这忽然让我想起了一个著名的处理问题方式,同时也是try/except工具的保证:获得事后原谅总是比获得事前许可,
要容易的多(EAFP);所以,也许我们可以自己做些什么:
def islikestring(anobj):
try: anobj + ' '
except: return False
else: return True
关键词:鸭子判断法、EAFP、isinstance、basestring
相关文章推荐
- 001_003 Python 测试一个对象是否是类字符串
- python cookbook 学习笔记 -- 1.3 测试一个对象是否是类字符串
- 文本处理 - 测试一个对象是否是类字符串
- Python Cookbook 第二版 汉化版 [Recipe 1.3] 测试一个对象是否为 String-like 对象
- 《Python CookBook2》 第一章 文本 - 测试一个对象是否是类字符串 && 字符串对齐
- 如何测试一个对象是否是类字符串
- Python3基础 hasattr 测试一个对象是否有指定的属性
- Python Cookbook 第二版 汉化版 [Recipe 1.3] 测试一个对象是否为 String-like 对象
- python中快速判断一个对象是否是字符串
- 测试一个对象是否是类字符串
- 6-2-1 字符串-字符串变量String-创建字符串变量-初始化字符串变量-字符串连接-输入字符串(单词、行)-对象变量的赋值-比较两个字符串是否同一个-比较两个字符串内容是否相同
- Python 判断一个字符串是否在列表中任何一个字符串中出现过
- 判断一个对象是否可迭代 的方法 分类: python 2015-03-27 12:20 82人阅读 评论(0) 收藏
- python:判断一个对象是否可迭代 的方法
- 轻松python文本专题-判断对象里面是否是类字符串(推荐使用isinstance(obj,str))
- Python下校验一个字符串是否为ip地址
- 轻松python文本专题-判断对象里面是否是类字符串(推荐使用isinstance(obj,str))
- python判断某个对象是否可以做一个字典的键多方法
- Python美味食谱: 1.3 测试对象是否为类字符串
- python使用any判断一个对象是否为空的方法