python通过装饰器检查函数参数数据类型的方法
python通过装饰器检查函数参数数据类型的方法
发布时间:2016-12-28 来源:查字典编辑
摘要:本文实例讲述了python通过装饰器检查函数参数数据类型的方法。分享给大家供大家参考。具体分析如下:这段代码定义了一个python装饰器,通...

本文实例讲述了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学习
脚本专栏子分类