python带参数的装饰器怎么写?

2023-12-14 13:38:13网络知识悟空

python带参数的装饰器怎么写?

1、装饰器说明

装饰器看上去并没有任何参数(使用@时被装饰的方法作为隐式参数传递给装饰器)。但是,有时候让装饰器自带一些参数,可以提供更灵活的应用。

2、实例

我们改写requires_ints,使其还可以限制被装饰函数的参数的数量:

fromfunctoolsimportwraps

defrequires_ints(count=0):

defdecorator(func):

@wraps(func)

defwrapper(*args,**kwargs):

values=[iforiinkwargs.values()]

args_list=list(args)+[iforiinkwargs.values()]

ifcount==0:

#Notlimit

pass

eliflen(args_list)>count:

raiseException(f'Thenumberofargumentscannotmorethan{count}')

forarginargs_list:

ifnotisinstance(arg,int):

raiseTypeError('Onlyacceptintegers.')

returnfunc(*args,**kwargs)

returnwrapper

returndecorator

@requires_ints(5)

defadd(*args):

'''Returnthesumofallarguments'''

returnsum(args)

以上就是python带参数装饰器的写法,希望能对大家有所帮助,更多Python学习教程请关注IT培训机构:筋斗云。

发表评论: