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 相关文章推荐
python3简单实现微信爬虫
Apr 09 Python
python使用socket进行简单网络连接的方法
Apr 29 Python
python中ASCII码和字符的转换方法
Jul 09 Python
详解Python requests 超时和重试的方法
Dec 18 Python
Python实现的企业粉丝抽奖功能示例
Jul 26 Python
如何基于python操作excel并获取内容
Dec 24 Python
TensorFlow梯度求解tf.gradients实例
Feb 04 Python
Python模块 _winreg操作注册表
Feb 05 Python
Python图像处理库PIL的ImageDraw模块介绍详解
Feb 26 Python
python实现凯撒密码、凯撒加解密算法
Jun 11 Python
Python爬虫之用Xpath获取关键标签实现自动评论盖楼抽奖(二)
Jun 07 Python
Python基础之条件语句详解
Jun 16 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
什么是MVC,好东西啊
2007/05/03 PHP
提高PHP编程效率的方法
2013/11/07 PHP
php jquery 多文件上传简单实例
2013/12/23 PHP
微信access_token的获取开发示例
2015/04/16 PHP
PHP实现链式操作的原理详解
2016/09/16 PHP
php和redis实现秒杀活动的流程
2019/07/17 PHP
php使用gearman进行任务分发操作实例详解
2020/02/26 PHP
jQuery实现简单的DIV拖动效果
2016/02/19 Javascript
JavaScript设计模式经典之命令模式
2016/02/24 Javascript
微信小程序 教程之模板
2016/10/18 Javascript
vue cli2.0单页面title修改方法
2018/06/07 Javascript
vue中element 上传功能的实现思路
2018/07/06 Javascript
angular实现input输入监听的示例
2018/08/31 Javascript
Vue实现简易翻页效果源码分享
2018/11/08 Javascript
vuedraggable+element ui实现页面控件拖拽排序效果
2020/07/29 Javascript
解决Antd Table组件表头不对齐的问题
2020/10/27 Javascript
[04:36]DOTA2国际邀请赛 ti3精彩集锦
2013/08/19 DOTA
[01:35]辉夜杯战队访谈宣传片—LGD
2015/12/25 DOTA
[51:17]VGJ.T vs Mineski 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
Python实现对百度云的文件上传(实例讲解)
2017/10/21 Python
python正则表达式面试题解答
2020/04/28 Python
Python基于whois模块简单识别网站域名及所有者的方法
2018/04/23 Python
python生成ppt的方法
2018/06/07 Python
python flask解析json数据不完整的解决方法
2019/05/26 Python
python通过文本在一个图中画多条线的实例
2020/02/21 Python
详解html2canvas截图不能截取圆角图片的解决方案
2018/01/30 HTML / CSS
moosejaw旗下的户外商品促销网站:Mountain Steals
2017/02/27 全球购物
马来西亚在线时尚女装商店:KEI MAG
2017/09/28 全球购物
美国滑雪和滑雪板商店:Buckman
2018/03/03 全球购物
腾讯公司的一个sql题
2013/01/22 面试题
岗位职责怎么写
2014/03/14 职场文书
家长给学校的建议书
2014/05/15 职场文书
环保公益策划方案
2014/08/15 职场文书
地方白酒代理协议书
2014/10/25 职场文书
公务员年度考核个人总结
2015/02/12 职场文书
go:垃圾回收GC触发条件详解
2021/04/24 Golang