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

有时候需要测试一个对象,尤其是在写一个函数或则方法到时候,需要测试传入的参数是否是一个字符串(或这个对象是否类似于字符串的行为):

下面的方式是利用内建的isinstance和basestring来简单快速的检查某个对象是否是字符串或Unicode对象的方法,如下:

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

我们可能第一反映会使用type方法进行类型测试:

def isAString(anobj):
    return type(anobj) is type('') 
这种方式非常不pythonic,而且Unicode对象无法通过检测。

第一种检测方式则要好很多,内建到basestring是str和Unicode类型到共同基类,任何类字符串的自定义类型都应该从basestring派生,这样能保证isinstance正常工作。不过,isinstance方式也不是100%完美的检测方案,对于Python标准库中的UserString模块到UserString类到实例,无法通过检测。UserString对象是明显的类字符串对象,由于它不是从basestring派生的。如果要支持这种类型检测,可以直接检查一个对象到行为是否真的像字符串一样,例如:

def isStringLike(anobj):
    try:
        anobj+''
    except:
        return False
    return True

这个方法比isAString函数慢很多,但适用于UserString的检测也适于str和unicode。

小结:Python中通常的类型检查方法是所谓的鸭子判断法:如果它走路像鸭子,叫声也像鸭子,那么对于我们来说它就是鸭子了。

转载于:https://www.cnblogs.com/JustToNight/p/4416026.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值