zoukankan      html  css  js  c++  java
  • 测试一个对象是否是类字符串

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

    下面的方式是利用内建的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中通常的类型检查方法是所谓的鸭子判断法:如果它走路像鸭子,叫声也像鸭子,那么对于我们来说它就是鸭子了。

    千里之行始于足下,成长就是守护和付出的过程,人生苦短,我用Python。
  • 相关阅读:
    [转载]Bison-Flex 笔记
    LeetCode 5 Longest Palindromic Substring manacher算法,最长回文子序列,string.substr(start,len) 难度:2
    LeetCode 6 ZigZag Conversion 模拟 难度:0
    LeetCode 7 Reverse Integer int:2147483647-2147483648 难度:2
    #Leetcode# 383. Ransom Note
    #Leetcode# 92. Reverse Linked List II
    #Leetcode# 143. Reorder List
    #Leetcode# 532. K-diff Pairs in an Array
    #Leetcode# 86. Partition List
    Sudoku
  • 原文地址:https://www.cnblogs.com/JustToNight/p/4416026.html
Copyright © 2011-2022 走看看