玩转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

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

时间: 2024-10-10 00:14:34

玩转python之测试一个对象是否是类字符串的相关文章

《Python CookBook2》 第一章 文本 - 测试一个对象是否是类字符串 && 字符串对齐

测试一个对象是否是类字符串 任务 有时候需要测试一个对象,尤其是当你在写一个函数或者方法的时候,经常需要测试传入的参数是否是一个字符串. 解决方案 利用内建的isinstance 和basestring 来简单快速地查询某个对象是否是字符串或者是Unicode 对象方法,如下: 代码: >>> def isAString(aaa): return isinstance(aaa,basestring) 运行结果: >>> isAString('aaa') True 字符串

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

有时候需要测试一个对象,尤其是在写一个函数或则方法到时候,需要测试传入的参数是否是一个字符串(或这个对象是否类似于字符串的行为): 下面的方式是利用内建的isinstance和basestring来简单快速的检查某个对象是否是字符串或Unicode对象的方法,如下: def isAString(anobj): return isinstance(anobj, basestring) 我们可能第一反映会使用type方法进行类型测试: def isAString(anobj): return typ

python cookbook学习之一:测试一个对象是否是类字符串

# -*- coding: utf-8 -*-#__author__ = 'Administrator'#一般使用2种方法来解决这个问题isinstance basestring来简单快速的检查某个字符串的类型def isString(obj):    print isinstance(obj,basestring)#如果你第一个想到(新手)使用type(obj)时,算是正常的,但如果是老手,使用type(obj)则进糟糕#basestring是str与unicode类型的基类#如果想支持字符串

玩转Python让人讨厌的编码问题

Python的编码问题基本是每个新手都会遇到的坎,但只要完全掌握了就跳过了这个坑,万变不离其中,这不最近我也遇到了这个问题,来一起看看吧. 事情的起因是review同事做的一个上传功能,看下面一段代码,self.fp是上传的文件句柄 fpdata = [line.strip().decode('gbk').encode('utf-8').decode('utf-8') for line in self.fp] data = [''.join(['(', self.game, ',', ','.j

玩蛇(Python)笔记之基础Part2

玩蛇(Python)笔记之基础Part2 一.列表 1.列表 别的语言叫数组 python牛逼非要取个不一样的名字 1 age = 23 2 name = ["biubiubiu", "jiujiujiu", 22, age] 3 # namecopy = name 4 # namecopy.pop() 5 print(name) 6 # print(namecopy) List 2.列表取值 正常index 从零开始,,取倒数加负号 倒数第一就是[-1] 3.列表

老司机带你用vagrant打造一站式python开发测试环境

前言 作为一个学习和使用Python的老司机,好像应该经常总结一点东西的,让新司机尽快上路,少走弯路,然后大家一起愉快的玩耍. 今天,咱们就使用vagrant配合xshell打造一站式Python开发测试环境. 目的 让你在Windows下,也能愉快的使用Linux环境调试Python. 适用人群:Python新手和希望在Windows下使用Linux环境调试Python的小伙伴们. 难度:super easy 最终效果:只用一个xshell终端(其他类似的都可以),启动ubuntu虚拟机,py

python生成测试图片

直接代码 1 import cv2.cv as cv 2 saveImagePath = 'E:/ScreenTestImages/' 3 4 colorRed = [0,0,255] 5 colorGreen = [0,255,0] 6 colorBlue = [255,0,0] 7 colorWhite = [255,255,255] 8 colorBlack = [0,0,0] 9 colorAqua = [255,255,0] 10 colorFuchsia = [255,0,255]

玩蛇(Python)笔记之基础Part3

玩蛇(Python)笔记之基础Part1 一.集合 1.set 无序,不重复序列 {}创建,直接写元素 2.set功能 __init__()构造方法,,使用强制转换就会调用此方法 1 set1 = {'year', 'jiujiujiu'} 2 print(type(set1)) 3 # 创建集合 4 s = set() # 创建空集合 5 li = [11, 22, 11, 22] 6 s = set(li) set 3.集合的基本操作 1 # 操作集合 2 s1 = set() 3 s1.a

Jenkins自动化构建python nose测试

简介 通过Jenkins自动化构建python nose测试分两步: 1. 创建节点(节点就是执行自动化测试的机器): 2. 创建任务并绑定节点(用指定的机器来跑我们创建的任务,这里我们选择执行一段脚本). 创建节点 1. 登录jenkins平台,在左侧的节点中随便找一个节点点进去,然后在导航栏点击“nodes”-->点击“创建节点”-->输入“节点名称”-->选择“Permanent Agent”-->点击“OK”: 2. 指定jenkins的工作目录,随便指定-->点击“