python通过装饰器检查函数参数数据类型的方法


Posted in Python onMarch 13, 2015

本文实例讲述了python通过装饰器检查函数参数数据类型的方法。分享给大家供大家参考。具体分析如下:

这段代码定义了一个python装饰器,通过此装饰器可以用来检查指定函数的参数是否是指定的类型,在定义函数时加入此装饰器可以非常清晰的检测函数参数的类型,非常方便

def accepts(exception,**types):

    def check_accepts(f):

        assert len(types) == f.func_code.co_argcount, \

        'accept number of arguments not equal with function number of arguments in "%s"' % f.func_name

        def new_f(*args, **kwds):

            for i,v in enumerate(args):

                if types.has_key(f.func_code.co_varnames[i]) and \

                    not isinstance(v, types[f.func_code.co_varnames[i]]):

                    raise exception("arg '%s'=%r does not match %s" % \

                        (f.func_code.co_varnames[i],v,types[f.func_code.co_varnames[i]]))

                    del types[f.func_code.co_varnames[i]]

            for k,v in kwds.iteritems():

                if types.has_key(k) and not isinstance(v, types[k]):

                    raise exception("arg '%s'=%r does not match %s" % \

                        (k,v,types[k]))

            return f(*args, **kwds)

        new_f.func_name = f.func_name

        return new_f

    return check_accepts

def exmaple():

    @accepts(Exception,a=int,b=list,c=(str,unicode))

    def test(a,b=None,c=None)

        print 'ok'

    test(13,c=[],b='df')

希望本文所述对大家的Python程序设计有所帮助。

Python 相关文章推荐
PHP网页抓取之抓取百度贴吧邮箱数据代码分享
Apr 13 Python
关于numpy中np.nonzero()函数用法的详解
Feb 07 Python
利用Python如何批量修改数据库执行Sql文件
Jul 29 Python
Python实现统计英文文章词频的方法分析
Jan 28 Python
Python中正则表达式的用法总结
Feb 22 Python
Python定时任务工具之APScheduler使用方式
Jul 24 Python
django将数组传递给前台模板的方法
Aug 06 Python
python开发实例之python使用Websocket库开发简单聊天工具实例详解(python+Websocket+JS)
Mar 18 Python
Python多线程实现支付模拟请求过程解析
Apr 21 Python
python中shell执行知识点
May 06 Python
Python3爬虫中Splash的知识总结
Jul 10 Python
解决Pytorch中关于model.eval的问题
May 22 Python
python实现简单温度转换的方法
Mar 13 #Python
python实现简单socket程序在两台电脑之间传输消息的方法
Mar 13 #Python
Python比较两个图片相似度的方法
Mar 13 #Python
python通过urllib2获取带有中文参数url内容的方法
Mar 13 #Python
python将MongoDB里的ObjectId转换为时间戳的方法
Mar 13 #Python
python通过正则查找微博@(at)用户的方法
Mar 13 #Python
python使用chardet判断字符串编码的方法
Mar 13 #Python
You might like
与空气斗智斗勇的经典《Overlord》,传说中的“无稽之谈”
2020/04/09 日漫
PHP中的Iterator迭代对象属性详解
2019/04/12 PHP
window.open()弹出居中的窗口
2007/02/01 Javascript
javascript学习随笔(使用window和frame)的技巧
2007/03/08 Javascript
javascript一点特殊用法
2008/05/28 Javascript
JavaScript Event学习第七章 事件属性
2010/02/07 Javascript
jQuery ajax BUG:object doesn't support this property or method
2010/07/06 Javascript
Jquery性能优化详解
2014/05/15 Javascript
JavaScript常用小技巧小结
2014/12/29 Javascript
JavaScript数组常用方法
2015/03/02 Javascript
Javascript BOM学习小结(六)
2015/11/26 Javascript
简单谈谈JS数组中的indexOf方法
2016/10/13 Javascript
angularJs关于指令的一些冷门属性详解
2016/10/24 Javascript
基于vue.js轮播组件vue-awesome-swiper实现轮播图
2017/03/17 Javascript
微信小程序云开发如何使用云函数生成二维码
2019/05/18 Javascript
js实现圆形显示鼠标单击位置
2020/02/11 Javascript
javascript绘制简单钟表效果
2020/04/07 Javascript
Vue 封装防刷新考试倒计时组件的实现
2020/06/05 Javascript
简单介绍Python中利用生成器实现的并发编程
2015/05/04 Python
python利用openpyxl拆分多个工作表的工作簿的方法
2019/09/27 Python
python opencv将表格图片按照表格框线分割和识别
2019/10/30 Python
keras的ImageDataGenerator和flow()的用法说明
2020/07/03 Python
Python爬虫获取op.gg英雄联盟英雄对位胜率的源码
2021/01/29 Python
Html5 Canvas 实现一个“刮刮乐”游戏
2019/09/05 HTML / CSS
切尔西足球俱乐部官方网上商店:Chelsea FC
2019/06/17 全球购物
安全的后院和健身蹦床:JumpSport
2019/07/15 全球购物
Ray-Ban雷朋瑞典官方网站:全球领先的太阳眼镜品牌
2019/08/22 全球购物
如何向接受结构参数的函数传入常数值
2016/02/17 面试题
介绍一下grep命令的使用
2012/06/28 面试题
庆元旦广播稿
2014/02/10 职场文书
施工安全承诺书
2014/05/22 职场文书
2014年党员评议表自我评价
2014/09/27 职场文书
领导班子四风问题个人对照检查材料
2014/10/04 职场文书
车辆安全隐患排查制度
2015/08/05 职场文书
python文本处理的方案(结巴分词并去除符号)
2021/05/26 Python
css3应用示例:新增的选择器
2022/03/16 HTML / CSS