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 opencv3实现人脸识别(windows)
May 25 Python
Python3爬虫之自动查询天气并实现语音播报
Feb 21 Python
Python实现简单查找最长子串功能示例
Feb 26 Python
解决.ui文件生成的.py文件运行不出现界面的方法
Jun 19 Python
python 寻找离散序列极值点的方法
Jul 10 Python
python 字符串常用方法汇总详解
Sep 16 Python
python实现拼图小游戏
Feb 22 Python
django Layui界面点击弹出对话框并请求逻辑生成分页的动态表格实例
May 12 Python
keras绘制acc和loss曲线图实例
Jun 15 Python
Python编写memcached启动脚本代码实例
Aug 14 Python
Python直接赋值及深浅拷贝原理详解
Sep 05 Python
Python实现简单的猜单词小游戏
Oct 28 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
星际争霸兵种名称对照表
2020/03/04 星际争霸
PHP 抓取网页图片并且另存为的实现代码
2010/03/24 PHP
PHP数组无限分级数据的层级化处理代码
2012/12/29 PHP
php中__destruct与register_shutdown_function执行的先后顺序问题
2014/10/17 PHP
php运行提示:Fatal error Allowed memory size内存不足的解决方法
2014/12/17 PHP
php利用scws实现mysql全文搜索功能的方法
2014/12/25 PHP
php的闭包(Closure)匿名函数详解
2015/02/22 PHP
初识ThinkPHP控制器
2016/04/07 PHP
JavaScript插入动态样式实现代码
2012/02/22 Javascript
javascript结合Canvas 实现简易的圆形时钟
2015/03/11 Javascript
jQuery ajax请求返回list数据动态生成input标签,并把list数据赋值到input标签
2016/03/29 Javascript
jQuery+CSS3+Html5实现弹出层效果实例代码(附源码下载)
2016/05/16 Javascript
jQuery中通过ajax调用webservice传递数组参数的问题实例详解
2016/05/20 Javascript
浅谈Vue的基本应用
2016/12/27 Javascript
JavaScript实现网页头部进度条刷新
2017/04/16 Javascript
nodejs 终端打印进度条实例代码
2017/04/22 NodeJs
ES6新增的math,Number方法
2017/08/06 Javascript
vue+vuex+axios实现登录、注册页权限拦截
2018/03/09 Javascript
Python中asyncore异步模块的用法及实现httpclient的实例
2016/06/28 Python
Python类属性的延迟计算
2016/10/22 Python
在Windows中设置Python环境变量的实例讲解
2018/04/28 Python
pandas通过索引进行排序的示例
2018/11/16 Python
如何使用python的ctypes调用医保中心的dll动态库下载医保中心的账单
2020/05/24 Python
仿CSDN Blog返回页面顶部功能实现原理及代码
2013/06/30 HTML / CSS
处理HTML5新标签的浏览器兼容版问题
2017/03/13 HTML / CSS
新奇的小玩意:IWOOT
2016/07/21 全球购物
全球最大化妆品零售网站:SkinStore
2020/10/24 全球购物
沙特阿拉伯排名第一的在线时尚购物应用程序:1Zillion
2020/08/08 全球购物
一些网络技术方面的面试题
2014/05/01 面试题
个人贷款担保书
2014/04/01 职场文书
法学专业大学生实习自我鉴定
2014/10/05 职场文书
顶岗实习协议书
2015/01/29 职场文书
中学团支部工作总结
2015/08/13 职场文书
2016年圣诞节寄语(一句话)
2015/12/07 职场文书
使用 Apache 反向代理的设置技巧
2022/01/18 Servers
详解ZABBIX监控ESXI主机的问题
2022/06/21 Servers