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 相关文章推荐
使用Python的Django框架实现事务交易管理的教程
Apr 20 Python
利用Python进行异常值分析实例代码
Dec 07 Python
python实现媒体播放器功能
Feb 11 Python
对python中数组的del,remove,pop区别详解
Nov 07 Python
python+PyQT实现系统桌面时钟
Jun 16 Python
python 读取Linux服务器上的文件方法
Dec 27 Python
详解python中@的用法
Mar 27 Python
python异步实现定时任务和周期任务的方法
Jun 29 Python
django写用户登录判定并跳转制定页面的实例
Aug 21 Python
PyQt+socket实现远程操作服务器的方法示例
Aug 22 Python
使用OpCode绕过Python沙箱的方法详解
Sep 03 Python
Python内置数据类型中的集合详解
Mar 18 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
php中substr()函数参数说明及用法实例
2014/11/15 PHP
6个常见的 PHP 安全性攻击实例和阻止方法
2020/12/16 PHP
让mayfish支持mysqli数据库驱动的实现方法
2010/05/22 Javascript
JS取文本框中最小值的简单实例
2013/11/29 Javascript
浅谈jQuery中 wrap() wrapAll() 与 wrapInner()的差异
2014/11/12 Javascript
jQuery制作简单柱状图实例
2015/01/28 Javascript
JS实现的网页倒计时数字时钟效果
2015/03/02 Javascript
深入浅析同源策略和跨域访问
2015/11/26 Javascript
jQuery实现获取绑定自定义事件元素的方法
2015/12/02 Javascript
js注入 黑客之路必备!
2016/09/14 Javascript
react-router实现按需加载
2017/05/09 Javascript
移动前端图片压缩上传的实例
2017/12/06 Javascript
NodeJS简单实现WebSocket功能示例
2018/02/10 NodeJs
新手必须知的Node.js 4个JavaScript基本概念
2018/09/16 Javascript
Angular resolve基础用法详解
2018/10/03 Javascript
手把手带你封装一个vue component第三方库
2019/02/14 Javascript
JavaScript中AOP的实现与应用
2019/05/06 Javascript
javascript实现前端成语点击验证
2020/06/24 Javascript
Python中使用bidict模块双向字典结构的奇技淫巧
2016/07/12 Python
浅谈Python的垃圾回收机制
2016/12/17 Python
解决phantomjs截图失败,phantom.exit位置的问题
2018/05/17 Python
浅谈python下含中文字符串正则表达式的编码问题
2018/12/07 Python
python中bytes和str类型的区别
2019/10/21 Python
Python 音频生成器的实现示例
2019/12/24 Python
VS2019+python3.7+opencv4.1+tensorflow1.13配置详解
2020/04/16 Python
法国太阳镜店:Sunglasses Shop
2016/08/27 全球购物
BRASTY捷克:购买香水、化妆品、手袋和手表
2017/07/12 全球购物
建筑项目策划书
2014/01/13 职场文书
教师节促销方案
2014/03/22 职场文书
优秀班主任经验交流材料
2014/06/02 职场文书
高中生第一学年自我鉴定
2014/09/12 职场文书
生产操作工岗位职责
2014/09/16 职场文书
2014年中学生检讨书大全
2014/10/09 职场文书
入党团支部推荐意见
2015/06/02 职场文书
用Python爬取各大高校并可视化帮弟弟选大学,弟弟直呼牛X
2021/06/11 Python
面试中老生常谈的MySQL问答集锦夯实基础
2022/03/13 MySQL