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删除空文件和空文件夹的方法
Jul 14 Python
wxPython的安装图文教程(Windows)
Dec 28 Python
Python cookbook(数据结构与算法)通过公共键对字典列表排序算法示例
Mar 15 Python
Python Dataframe 指定多列去重、求差集的方法
Jul 10 Python
python实现简单五子棋游戏
Jun 18 Python
对Python中小整数对象池和大整数对象池的使用详解
Jul 09 Python
Django视图扩展类知识点详解
Oct 25 Python
关于win10在tensorflow的安装及在pycharm中运行步骤详解
Mar 16 Python
2021年的Python 时间轴和即将推出的功能详解
Jul 27 Python
Python 实现PS滤镜的旋涡特效
Dec 03 Python
在python3.9下如何安装scrapy的方法
Feb 03 Python
Python中的 Set 与 dict
Mar 13 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读注册表
2006/10/09 PHP
PHP中call_user_func_array()函数的用法演示
2012/02/05 PHP
深入理解php的MySQL连接类
2013/06/07 PHP
PHP利用hash冲突漏洞进行DDoS攻击的方法分析
2015/03/26 PHP
php示例详解Constructor Prototype Pattern 原型模式
2015/10/15 PHP
Yii CGridView用法实例详解
2016/07/12 PHP
PHP7如何开启Opcode打造强悍性能详解
2018/05/11 PHP
php中的依赖注入实例详解
2019/08/14 PHP
50个优秀经典PHP算法大集合 附源码
2020/08/26 PHP
js使用for循环及if语句判断多个一样的name
2014/09/09 Javascript
javascript实现单击和双击并存的方法
2014/12/13 Javascript
详解JavaScript逻辑Not运算符
2015/12/04 Javascript
javascript+HTML5 Canvas绘制转盘抽奖
2020/05/16 Javascript
深入理解ES6中let和闭包
2018/02/22 Javascript
uploadify插件实现多个图片上传并预览
2019/09/30 Javascript
[02:41]DOTA2亚洲邀请赛小组赛第三日 赛事回顾
2015/02/01 DOTA
python用ConfigObj读写配置文件的实现代码
2013/03/04 Python
python函数参数*args**kwargs用法实例
2013/12/04 Python
Python简单调用MySQL存储过程并获得返回值的方法
2015/07/20 Python
Python numpy实现数组合并实例(vstack,hstack)
2018/01/09 Python
Pycharm设置去除显示的波浪线方法
2018/10/28 Python
详解python中TCP协议中的粘包问题
2019/03/22 Python
Python 使用 attrs 和 cattrs 实现面向对象编程的实践
2019/06/12 Python
在Python中COM口的调用方法
2019/07/03 Python
Python之数据序列化(json、pickle、shelve)详解
2019/08/30 Python
CSS3实现超慢速移动动画效果非常流畅无卡顿
2014/06/15 HTML / CSS
啤酒销售实习自我鉴定
2013/09/24 职场文书
2014年父亲节活动方案
2014/03/06 职场文书
阅兵口号
2014/06/19 职场文书
银行求职自荐信
2014/06/30 职场文书
中学生社会实践活动总结
2014/07/03 职场文书
十佳家长事迹材料
2014/08/26 职场文书
上帝也疯狂观后感
2015/06/09 职场文书
摘录式读书笔记
2015/07/01 职场文书
2016党员学习作风建设心得体会
2016/01/21 职场文书
经典哲理警句:志不真则心不热,心不热则功不贤
2019/11/14 职场文书