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之wxPython菜单使用详解
Sep 28 Python
Python实现文件复制删除
Apr 19 Python
python 捕获shell脚本的输出结果实例
Jan 04 Python
Python拼接字符串的7种方法总结
Nov 01 Python
python 生成图形验证码的方法示例
Nov 11 Python
python如何实现异步调用函数执行
Jul 08 Python
pytorch 批次遍历数据集打印数据的例子
Dec 30 Python
Python while循环使用else语句代码实例
Feb 07 Python
tensorflow 实现自定义梯度反向传播代码
Feb 10 Python
python实现飞机大战项目
Mar 11 Python
使用matlab 判断两个矩阵是否相等的实例
May 11 Python
python通过cython加密代码
Dec 11 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 IPV6正则表达式验证代码
2010/02/16 PHP
五款PHP代码重构工具推荐
2014/10/14 PHP
php的常量和变量实例详解
2017/06/27 PHP
显示js对象所有属性和方法的函数
2009/10/16 Javascript
15个款优秀的 jQuery 图片特效插件推荐
2011/11/21 Javascript
JavaScript获取路径设计源码
2014/05/22 Javascript
js 判断一组日期是否是连续的简单实例
2016/07/11 Javascript
浅谈js控制li标签排序问题 js调用php函数的方法
2016/10/16 Javascript
工厂模式在JS中的实践
2017/01/18 Javascript
微信小程序 五星评分的实现实例
2017/08/04 Javascript
详解Angular调试技巧之报错404(not found)
2018/01/31 Javascript
基于node搭建服务器,写接口,调接口,跨域的实例
2018/05/13 Javascript
socket在egg中的使用实例代码详解
2019/05/30 Javascript
vue.js购物车添加商品组件的方法
2019/09/17 Javascript
VsCode里的Vue模板的实现
2020/08/12 Javascript
python的else子句使用指南
2016/02/27 Python
基于python的字节编译详解
2017/09/20 Python
Atom的python插件和常用插件说明
2018/07/08 Python
python opencv实现图片旋转矩形分割
2018/07/26 Python
selenium+python截图不成功的解决方法
2019/01/30 Python
Django框架使用mysql视图操作示例
2019/05/15 Python
使用Matplotlib绘制不同颜色的带箭头的线实例
2020/04/17 Python
keras 自定义loss model.add_loss的使用详解
2020/06/22 Python
Ralph Lauren意大利官方网站:时尚界最负盛名的品牌之一
2018/10/18 全球购物
英国设计的甲板鞋和船鞋:Chatham
2018/12/06 全球购物
公司门卫管理制度
2014/02/01 职场文书
大学生应聘导游自荐信
2014/06/02 职场文书
新郎新娘答谢词
2015/01/04 职场文书
大班下学期个人总结
2015/02/13 职场文书
学校党支部承诺书
2015/04/30 职场文书
公司管理建议书
2015/09/14 职场文书
心理学培训心得体会
2016/01/22 职场文书
利用python做表格数据处理
2021/04/13 Python
matplotlib如何设置坐标轴刻度的个数及标签的方法总结
2021/06/11 Python
浅谈resultMap的用法及关联结果集映射
2021/06/30 Java/Android
Java使用Unsafe类的示例详解
2021/09/25 Java/Android