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 不关闭控制台的实现方法
Oct 23 Python
Python随机生成一个6位的验证码代码分享
Mar 24 Python
用Python制作简单的钢琴程序的教程
Apr 01 Python
python操作sqlite的CRUD实例分析
May 08 Python
Python中如何获取类属性的列表
Dec 26 Python
python异步实现定时任务和周期任务的方法
Jun 29 Python
Python numpy.zero() 初始化矩阵实例
Nov 27 Python
python关于变量名的基础知识点
Mar 03 Python
Python 读取xml数据,cv2裁剪图片实例
Mar 10 Python
Python调用shell cmd方法代码示例解析
Jun 18 Python
python高级特性简介
Aug 13 Python
Pandas数据类型之category的用法
Jun 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
简单的PHP图片上传程序
2008/03/27 PHP
基于Zend的Config机制的应用分析
2013/05/02 PHP
使用php 获取时间今天明天昨天时间戳的详解
2013/06/20 PHP
九个你必须知道而且又很好用的php函数和特点
2013/08/08 PHP
PHP+swoole实现简单多人在线聊天群发
2016/01/19 PHP
php导出csv文件,可导出前导0实例代码
2016/11/16 PHP
PHP-FPM的配置与优化讲解
2019/03/15 PHP
PHP架构及原理知识点详解
2019/12/22 PHP
jquery mobile 移动web(5)
2015/12/20 Javascript
在Node.js中使用Javascript Generators详解
2016/05/05 Javascript
javascript 中的console.log和弹出窗口alert
2016/08/30 Javascript
three.js快速入门【推荐】
2017/01/21 Javascript
JS实现仿饿了么在浏览器标签页失去焦点时网页Title改变
2017/06/01 Javascript
动态加载权限管理模块中的Vue组件
2018/01/16 Javascript
vue3.0 CLI - 2.2 - 组件 home.vue 的初步改造
2018/09/14 Javascript
vue根据值给予不同class的实例
2018/09/29 Javascript
微信小程序使用component自定义toast弹窗效果
2018/11/27 Javascript
详解ES7 Decorator 入门解析
2019/02/18 Javascript
js实现秒表计时器
2019/12/16 Javascript
django简单的前后端分离的数据传输实例 axios
2020/05/18 Javascript
Echarts.js无法引入问题解决方案
2020/10/30 Javascript
python使用内存zipfile对象在内存中打包文件示例
2014/04/30 Python
Python实现爬取知乎神回复简单爬虫代码分享
2015/01/04 Python
几种实用的pythonic语法实例代码
2018/02/24 Python
Python中文编码知识点
2019/02/18 Python
给大家整理了19个pythonic的编程习惯(小结)
2019/09/25 Python
Python嵌入C/C++进行开发详解
2020/06/09 Python
Python xlwings插入Excel图片的实现方法
2021/02/26 Python
HTML5页面音视频在微信和app下自动播放的实现方法
2016/10/20 HTML / CSS
Daniel Wellington官方海外旗舰店:丹尼尔惠灵顿DW手表
2018/02/22 全球购物
Python里面如何实现tuple和list的转换
2012/06/13 面试题
幼儿园亲子活动方案
2014/01/29 职场文书
纪念九一八事变演讲稿:青少年应树立远大理想
2014/09/14 职场文书
大学校园招聘会感想
2015/08/10 职场文书
python基础之错误和异常处理
2021/10/24 Python
golang用type-switch判断interface的实际存储类型
2022/04/14 Golang