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实现kNN算法
Dec 20 Python
异步任务队列Celery在Django中的使用方法
Jun 07 Python
教你利用Python玩转histogram直方图的五种方法
Jul 30 Python
Python3实现统计单词表中每个字母出现频率的方法示例
Jan 28 Python
10 分钟快速入门 Python3的教程
Jan 29 Python
Python实现删除排序数组中重复项的两种方法示例
Jan 31 Python
Python函数定义及传参方式详解(4种)
Mar 18 Python
python定时按日期备份MySQL数据并压缩
Apr 19 Python
django框架面向对象ORM模型继承用法实例分析
Jul 29 Python
解决使用Pandas 读取超过65536行的Excel文件问题
Nov 10 Python
Python ellipsis 的用法详解
Nov 20 Python
baselines示例程序train_cartpole.py的ImportError
May 20 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删除页面记录 同时刷新页面 删除条件用GET方式获得
2012/01/10 PHP
php 创建以UNIX时间戳命名的文件夹(示例代码)
2014/03/08 PHP
php实现的SESSION类
2014/12/02 PHP
mysql desc(DESCRIBE)命令实例讲解
2016/09/24 PHP
PHP之十六个魔术方法详细介绍
2016/11/01 PHP
PHP关于foreach复制知识点总结
2019/01/28 PHP
CentOS7系统搭建LAMP及更新PHP版本操作详解
2020/03/26 PHP
比较简单的异步加载JS文件的代码
2009/07/18 Javascript
filters.revealTrans.Transition使用方法小结
2010/08/19 Javascript
从零开始学习jQuery (八) 插播:jQuery实施方案
2011/02/23 Javascript
辨析JavaScript中的Undefined类型与null类型
2016/05/26 Javascript
全面解析DOM操作和jQuery实现选项移动操作代码分享
2016/06/07 Javascript
jQuery ready()和onload的加载耗时分析
2016/09/08 Javascript
Node.js使用gm拼装sprite图片
2017/07/04 Javascript
label+input实现按钮开关切换效果的实例
2017/08/16 Javascript
javascript填充默认头像方法
2018/02/22 Javascript
AngularJs分页插件使用详解
2018/06/30 Javascript
使用vue完成微信公众号网页小记(推荐)
2019/04/28 Javascript
NodeJS 文件夹拷贝以及删除功能
2019/09/03 NodeJs
Layui带搜索的下拉框的使用以及动态数据绑定方法
2019/09/28 Javascript
Vue2.4+新增属性.sync、$attrs、$listeners的具体使用
2020/03/08 Javascript
Vue使用轮询定时发送请求代码
2020/08/10 Javascript
[19:15]DK战队纪录片
2014/09/02 DOTA
Windows平台Python连接sqlite3数据库的方法分析
2017/07/12 Python
使用Python进行QQ批量登录的实例代码
2018/06/11 Python
Empty test suite.(PyCharm程序运行错误的解决方法)
2018/11/30 Python
python实现字典嵌套列表取值
2019/12/16 Python
Tensorflow 模型转换 .pb convert to .lite实例
2020/02/12 Python
Android Q之气泡弹窗的实现示例
2020/06/23 Python
如何用css3实现switch组件开关的方法
2018/02/09 HTML / CSS
WEB控件及HTML服务端控件能否调用客户端方法?如果能,请解释如何调用?
2015/08/25 面试题
《生命的药方》教学反思
2014/04/08 职场文书
质量在我心中演讲稿
2014/09/02 职场文书
建筑工程材料员岗位职责
2015/04/11 职场文书
党员转正申请报告
2015/05/15 职场文书
文化大革命观后感
2015/06/17 职场文书