zoukankan      html  css  js  c++  java
  • 玩转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

  • 相关阅读:
    计算机中的那些缩写词
    Linux 下dns的搭建
    html中的定位
    编程基础之流程控制
    linux中kvm的安装及快照管理
    zabbix 中监控windows 的typepref中的值
    详解Linux交互式shell脚本中创建对话框实例教程_linux服务器
    rhel7 单用户修改root密码
    Linux vim编辑器使用详解
    Linux下用ftp更新web内容!
  • 原文地址:https://www.cnblogs.com/thinker-lj/p/3919709.html
Copyright © 2011-2022 走看看