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中函数的参数
Apr 27 Python
Python psutil模块简单使用实例
Apr 28 Python
Python中subprocess模块用法实例详解
May 20 Python
Python中用字符串调用函数或方法示例代码
Aug 04 Python
Python基础教程之内置函数locals()和globals()用法分析
Mar 16 Python
将pip源更换到国内镜像的详细步骤
Apr 07 Python
Python+PyQt5实现美剧爬虫可视工具的方法
Apr 25 Python
python中的 zip函数详解及用法举例
Feb 16 Python
Jupyter打开图形界面并画出正弦函数图像实例
Apr 24 Python
如何在Python3中使用telnetlib模块连接网络设备
Sep 21 Python
利用Pycharm + Django搭建一个简单Python Web项目的步骤
Oct 22 Python
用Python爬取英雄联盟的皮肤详细示例
Dec 06 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 编写安全的代码时容易犯的错误小结
2010/05/20 PHP
用javascript控制iframe滚动的代码
2007/04/10 Javascript
css样式标签和js语法属性区别
2013/11/06 Javascript
jQuery实现感应鼠标动画效果自动伸长的输入框实例
2015/02/24 Javascript
纯Javascript实现ping功能的方法
2015/03/20 Javascript
基于javascript实现tab选项卡切换特效调试笔记
2016/03/30 Javascript
JavaScript的MVVM库Vue.js入门学习笔记
2016/05/03 Javascript
jQuery根据表单name获取值的方法
2016/05/24 Javascript
漫谈JS引擎的运行机制 你应该知道什么
2016/06/15 Javascript
node.js实现快速截图
2016/08/27 Javascript
Jquery uploadify 多余的Get请求(404错误)的解决方法
2017/01/26 Javascript
微信小程序实现给循环列表添加点击样式实例
2017/04/26 Javascript
js中innerText/textContent和innerHTML与target和currentTarget的区别
2019/01/21 Javascript
JavaScript使用面向对象实现的拖拽功能详解
2019/06/12 Javascript
javascript实现5秒倒计时并跳转功能
2019/06/20 Javascript
electron-vue开发环境内存泄漏问题汇总
2019/10/10 Javascript
小程序实现按下录音松开识别语音
2019/11/22 Javascript
5分钟快速看懂ES6中的反射与代理
2019/12/19 Javascript
[02:35]DOTA2超级联赛专访XB 难忘一年九冠称王
2013/06/20 DOTA
[59:35]DOTA2-DPC中国联赛定级赛 Aster vs DLG BO3第一场 1月8日
2021/03/11 DOTA
使用python调用浏览器并打开一个网址的例子
2014/06/05 Python
python实现用户登录系统
2016/05/21 Python
python出现"IndentationError: unexpected indent"错误解决办法
2017/10/15 Python
Python反射用法实例简析
2017/12/22 Python
轻松实现TensorFlow微信跳一跳的AI
2018/01/05 Python
python使用json序列化datetime类型实例解析
2018/02/11 Python
Django contenttypes 框架详解(小结)
2018/08/13 Python
Python3.6使用tesseract-ocr的正确方法
2018/10/17 Python
python 字符串常用方法汇总详解
2019/09/16 Python
python的命名规则知识点总结
2019/10/04 Python
高一政治教学反思
2014/01/28 职场文书
如何写自我评价?自我评价写什么好?
2014/03/14 职场文书
活动总结怎么写啊
2014/05/07 职场文书
副科竞争上岗演讲稿
2014/05/12 职场文书
个人主要事迹材料
2014/08/26 职场文书
公司租房协议书
2014/10/14 职场文书