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 list使用示例 list中找连续的数字
Jan 27 Python
Python实现的微信好友数据分析功能示例
Jun 21 Python
Django组件cookie与session的具体使用
Jun 05 Python
python并发爬虫实用工具tomorrow实用解析
Sep 25 Python
python的命名规则知识点总结
Oct 04 Python
Python笔记之代理模式
Nov 20 Python
TensorFlow索引与切片的实现方法
Nov 20 Python
一文了解python 3 字符串格式化 F-string 用法
Mar 04 Python
Django 解决上传文件时,request.FILES为空的问题
May 20 Python
python seaborn heatmap可视化相关性矩阵实例
Jun 03 Python
对Python 字典元素进行删除的方法
Jul 31 Python
Python用any()函数检查字符串中的字母以及如何使用all()函数
Apr 14 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
论坛头像随机变换代码
2006/10/09 PHP
WML,Apache,和 PHP 的介绍
2006/10/09 PHP
php 多文件上传的实现实例
2016/10/23 PHP
php json中文编码为null的解决办法
2016/12/14 PHP
FormValid0.5版本发布,带ajax自定义验证例子
2007/08/17 Javascript
jQuery 入门讲解1
2009/04/15 Javascript
jquery ui 1.7 ui.tabs 动态添加与关闭(按钮关闭+双击关闭)
2010/04/01 Javascript
动态获取复选框checkbox选中个数的jquery代码
2013/06/25 Javascript
js 获取radio按钮值的实例
2013/08/17 Javascript
javascript设计模式之解释器模式详解
2014/06/05 Javascript
jquery制作属于自己的select自定义样式
2015/11/23 Javascript
在页面中输出当前客户端时间javascript实例代码
2016/03/02 Javascript
ng-options和ng-checked在表单中的高级运用(推荐)
2017/01/21 Javascript
js仿淘宝评价评分功能
2017/02/28 Javascript
jQuery实现简单漂亮的Nav导航菜单效果
2017/03/29 jQuery
javascript深拷贝的原理与实现方法分析
2017/04/10 Javascript
详解vue-cli构建项目反向代理配置
2017/09/07 Javascript
Vue自定义过滤器格式化数字三位加一逗号实现代码
2018/03/23 Javascript
新版小程序登录授权的方法
2018/12/12 Javascript
微信小程序实现星级评价效果
2018/12/28 Javascript
js中Array对象的常用遍历方法详解
2019/01/17 Javascript
layui关闭层级、简单监听的实例
2019/09/06 Javascript
微信小程序实现打开并下载服务器上面的pdf文件到手机
2019/09/20 Javascript
解决Can't find variable: SockJS vue项目的问题
2020/09/22 Javascript
实用的 vue tags 创建缓存导航的过程实现
2020/12/03 Vue.js
Python去除列表中重复元素的方法
2015/03/20 Python
Python中import导入上一级目录模块及循环import问题的解决
2016/06/04 Python
详解Django+Uwsgi+Nginx 实现生产环境部署
2018/11/06 Python
PyCharm在新窗口打开项目的方法
2019/01/17 Python
Opencv+Python识别PCB板图片的步骤
2021/01/07 Python
HTML5和以前HTML4的区别整理
2013/10/20 HTML / CSS
英国在线女鞋目的地:SIMMI
2018/12/27 全球购物
规划编制实施方案
2014/03/15 职场文书
房屋买卖协议书
2014/04/10 职场文书
物业公司的岗位任命书
2014/06/06 职场文书
班级学雷锋活动总结
2014/06/26 职场文书