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插入排序算法的实现代码
Nov 21 Python
Python的另外几种语言实现
Jan 29 Python
Python常用小技巧总结
Jun 01 Python
Python实现截屏的函数
Jul 26 Python
python计算auc指标实例
Jul 13 Python
python 简单照相机调用系统摄像头实现方法 pygame
Aug 03 Python
python使用wxpy实现微信消息防撤回脚本
Apr 29 Python
python基础 range的用法解析
Aug 23 Python
Python参数传递实现过程及原理详解
May 14 Python
python如何运行js语句
Sep 09 Python
Django显示可视化图表的实践
May 10 Python
python必学知识之文件操作(建议收藏)
May 30 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中使用虚代理实现延迟加载技术
2014/11/05 PHP
php中session与cookie的比较
2015/01/27 PHP
PHP实现文件上传和多文件上传
2015/12/24 PHP
PHP 开发者该知道的 5 个 Composer 小技巧
2016/02/03 PHP
深入分析PHP优化及注意事项
2016/07/04 PHP
php利用云片网实现短信验证码功能的示例代码
2017/11/18 PHP
php实现通过stomp协议连接ActiveMQ操作示例
2020/02/23 PHP
Jquery知识点一 Jquery的ready和Dom的onload的区别
2011/01/15 Javascript
简短几句 通俗解释javascript的闭包
2011/01/17 Javascript
转换字符串为json对象的方法详解
2013/11/29 Javascript
用Javascript获取页面元素的具体位置
2013/12/09 Javascript
关于延迟加载JavaScript
2015/05/05 Javascript
在JavaScript应用中实现延迟加载的方法
2015/06/25 Javascript
drag-and-drop实现图片浏览器预览
2015/08/06 Javascript
url中的特殊符号有什么含义(推荐)
2016/06/17 Javascript
基于JQuery的购物车添加删除以及结算功能示例
2017/03/08 Javascript
使用elementUI实现将图片上传到本地的示例
2018/09/04 Javascript
Vue实现远程获取路由与页面刷新导致404错误的解决
2019/01/31 Javascript
JavaScript实现随机点名器实例详解
2019/05/07 Javascript
layui 富文本赋值,取值,取纯文本值的实例
2019/09/18 Javascript
js构造函数constructor和原型prototype原理与用法实例分析
2020/03/02 Javascript
JS实现audio音频剪裁剪切复制播放与上传(步骤详解)
2020/07/28 Javascript
python过滤字符串中不属于指定集合中字符的类实例
2015/06/30 Python
Python中的字符串操作和编码Unicode详解
2017/01/18 Python
python画微信表情符的实例代码
2019/10/09 Python
python 实现批量图片识别并翻译
2020/11/02 Python
python 基于opencv 实现一个鼠标绘图小程序
2020/12/11 Python
Pretty Green美国:英式摇滚服饰风格代表品牌之一
2019/01/23 全球购物
大学本科毕业生求职信范文
2013/12/18 职场文书
应届生求职自荐信范文
2014/04/07 职场文书
团结就是力量演讲稿
2014/05/21 职场文书
法人代表身份证明书及授权委托书
2014/09/16 职场文书
2015年幼儿园教研活动总结
2015/03/25 职场文书
2015年社区居委会工作总结
2015/05/18 职场文书
Python利用FlashText算法实现替换字符串
2022/03/31 Python
Windows 64位 安装 mysql 8.0.28 图文教程
2022/04/19 MySQL