雪是一种能够令人产生多种情绪的东西,当窗外那像柳絮、像芦花般的雪花,正在纷纷扬扬地从天而降的时候,当大地被雪花装饰得像铺上白色的地毯一样的时候,站在窗户边上,望着它们。
本文实例讲述了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通过装饰器检查函数参数数据类型的方法内容请查看相关栏目,小编编辑不易,再次感谢大家的支持!