• 玩转python之测试一个对象是否是类字符串


    提到类型测试,我首先想到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

  • 相关阅读:
    关于权限控制
    关于<!DOCTYPE>
    Oracle恢复目录的管理使用简要
    绑定变量介绍
    重做日志时间戳说明
    UNDO表空间监控说明
    Oracle rac进阶管理专家指导系列文档
    延迟块清除介绍
    ORA12500内存耗尽一例
    undo自动调优介绍
  • 原文地址:https://www.cnblogs.com/thinker-lj/p/3919709.html
Copyright © 2020-2023  润新知