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

Python (170) 2023-05-20 21:36:25

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学习网。

THE END

发表回复