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

  • 相关阅读:
    PostGIS常用SQL
    PostGIS相关数据类型及内置函数介绍
    基于GeoTools做GeoJson,PostGIS,Shapefile的转换
    如何使用GeoTools
    JavaScript 循环
    jquery 层级选择器
    jquery 表单选择
    js 字符串操作
    js对象
    js函数 作用域 闭包 回调
  • 原文地址:https://www.cnblogs.com/thinker-lj/p/3919709.html
Copyright © 2011-2022 走看看