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中zip()函数用法实例教程
Jul 31 Python
TensorFlow高效读取数据的方法示例
Feb 06 Python
详解django自定义中间件处理
Nov 21 Python
对Python 检查文件名是否规范的实例详解
Jun 10 Python
python中的单引号双引号区别知识点总结
Jun 23 Python
在Python中append以及extend返回None的例子
Jul 20 Python
python操作openpyxl导出Excel 设置单元格格式及合并处理代码实例
Aug 27 Python
Django choices下拉列表绑定实例
Mar 13 Python
查看已安装tensorflow版本的方法示例
Apr 19 Python
Python 列表反转显示的四种方法
Nov 16 Python
python工具快速为音视频自动生成字幕(使用说明)
Jan 27 Python
python学习之使用Matplotlib画实时的动态折线图的示例代码
Feb 25 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
咖啡知识 咖啡养豆要养多久 排气又是什么
2021/03/06 新手入门
require(),include(),require_once()和include_once()的异同
2007/01/02 PHP
php循环检测目录是否存在并创建(循环创建目录)
2011/01/06 PHP
实现PHP多线程异步请求的3种方法
2014/01/17 PHP
getJSON跨域SyntaxError问题分析
2014/08/07 PHP
php生成shtml类用法实例
2014/12/09 PHP
php自定义中文字符串截取函数substr_for_gb2312及substr_for_utf8示例
2016/05/28 PHP
PHP操作MySQL中BLOB字段的方法示例【存储文本与图片】
2017/09/15 PHP
jquery限定文本框只能输入数字即整数和小数
2013/11/29 Javascript
分享一个插件实现水珠自动下落效果
2016/06/01 Javascript
jquery实现ajax加载超时提示的方法
2016/07/23 Javascript
JavaScript实现in-place思想的快速排序方法
2016/08/07 Javascript
js在ie下打开对话窗口的方法小结
2016/10/24 Javascript
微信小程序云开发之云函数详解
2019/05/16 Javascript
jQuery中使用validate插件校验表单功能
2019/05/24 jQuery
layer.confirm()右边按钮实现href的例子
2019/09/27 Javascript
vue+elementUI组件table实现前端分页功能
2020/11/15 Javascript
JavaScript ECMA-262-3 深入解析(二):变量对象实例详解
2020/04/25 Javascript
[06:30]DOTA2英雄梦之声_第15期_死亡先知
2014/06/21 DOTA
Python中表达式x += y和x = x+y 的区别详解
2017/06/20 Python
详解如何用django实现redirect的几种方法总结
2018/11/22 Python
Python 3 使用Pillow生成漂亮的分形树图片
2019/12/24 Python
Python代码中如何读取键盘录入的值
2020/05/27 Python
python中re模块知识点总结
2021/01/17 Python
CSS3提交意见输入框样式代码
2014/10/30 HTML / CSS
基于ccs3的timeline时间线实现方法
2020/04/30 HTML / CSS
moosejaw旗下的户外商品促销网站:Mountain Steals
2017/02/27 全球购物
英文简历中的自我评价用语
2013/12/09 职场文书
银行演讲稿范文
2014/01/03 职场文书
公司拓展活动方案
2014/02/13 职场文书
青春演讲稿范文
2014/05/08 职场文书
中国梦团日活动总结
2014/07/07 职场文书
《中国梦我的梦》大学生演讲稿
2014/08/20 职场文书
党员教师群众路线对照检查材料思想汇报
2014/09/29 职场文书
干货!开幕词的写作方法
2019/04/02 职场文书
Jackson 反序列化时实现大小写不敏感设置
2021/06/29 Java/Android