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的chardet库获得文件编码并修改编码
Jan 22 Python
Python with的用法
Aug 22 Python
python中reduce()函数的使用方法示例
Sep 29 Python
将pandas.dataframe的数据写入到文件中的方法
Dec 07 Python
python远程连接MySQL数据库
Apr 19 Python
Python 使用 attrs 和 cattrs 实现面向对象编程的实践
Jun 12 Python
Django使用中间件解决前后端同源策略问题
Sep 02 Python
python base64库给用户名或密码加密的流程
Jan 02 Python
浅析python表达式4+0.5值的数据类型
Feb 26 Python
PYQT5 vscode联合操作qtdesigner的方法
Mar 24 Python
python自动打开浏览器下载zip并提取内容写入excel
Jan 04 Python
Python办公自动化解决world文件批量转换
Sep 15 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
受疫情影响 动画《Re从零开始的异世界生活》第二季延期至7月
2020/03/10 日漫
php 在线打包_支持子目录
2008/06/28 PHP
php版微信支付api.mch.weixin.qq.com域名解析慢原因与解决方法
2016/10/12 PHP
php禁用cookie后session设置方法分析
2016/10/19 PHP
[原创]PHP实现生成vcf vcard文件功能类定义与使用方法详解【附demo源码下载】
2017/09/02 PHP
PHP读取并输出XML文件数据的简单实现方法
2017/12/22 PHP
Ubuntu中支持PHP5与PHP7双版本的简单实现
2018/08/19 PHP
php7新特性的理解和比较总结
2019/04/14 PHP
关于Laravel参数验证的一些疑与惑
2019/11/19 PHP
PHP实现抽奖功能实例代码
2020/06/30 PHP
推荐40个简单的 jQuery 导航插件和教程(下篇)
2012/09/14 Javascript
json数据处理技巧(字段带空格、增加字段、排序等等)
2013/06/14 Javascript
jquery的live使用注意事项
2014/02/18 Javascript
jQuery+canvas实现的球体平抛及颜色动态变换效果
2016/01/28 Javascript
AngularJS框架的ng-app指令与自动加载实现方法分析
2017/01/04 Javascript
JavaScript中清空数组的三种方式
2017/03/22 Javascript
微信小程序 自动登陆PHP源码实例(源码下载)
2017/05/08 Javascript
聊聊Vue.js的template编译的问题
2017/10/09 Javascript
如何让微信小程序页面之间的通信不再变困难
2019/06/03 Javascript
Layui数据表格之单元格编辑方式
2019/10/26 Javascript
Vue + Scss 动态切换主题颜色实现换肤的示例代码
2020/04/27 Javascript
解决Antd Table表头加Icon和气泡提示的坑
2020/11/17 Javascript
js 执行上下文和作用域的相关总结
2021/02/08 Javascript
python基于xmlrpc实现二进制文件传输的方法
2015/06/02 Python
浅析Python3中的对象垃圾收集机制
2019/06/06 Python
python如何查看安装了的模块
2020/06/23 Python
Python字符串三种格式化输出
2020/09/17 Python
python excel和yaml文件的读取封装
2021/01/12 Python
职工运动会感言
2014/02/07 职场文书
主管会计岗位职责
2014/03/13 职场文书
小学生操行评语
2014/04/22 职场文书
职位说明书范文
2014/05/07 职场文书
服务承诺书格式
2014/05/21 职场文书
2015年小学语文教学工作总结
2015/05/25 职场文书
2016年圣诞节寄语(一句话)
2015/12/07 职场文书
Pytorch 实现变量类型转换
2021/05/17 Python