一般,我们编写一个装饰器的模式为
def outer(func):
# 定义一个内嵌的包装函数
def inner():
func()
# 将包装后的函数返回
return inner
闭包的概念就是指运行时自带上下文的函数,它运行的时候自带了上层函数传给它的变量。
因此如果要给装饰器传参,需要再在装饰器外部封装一层函数,然后返回这个装饰器,这样装饰器函数可以使用传入的参数了
如https://mp.weixin.qq.com/s/buWtxY9Q9SGTcW48mgL36w中的一个例子
出错重试装饰器:
def retry(times=3,wait_time=10):
def warp_func(func):
def fild_retry(*args,**kwargs):
for time in range(times):
try:
func(*args,**kwargs)
return
except:
time.sleep(wait_time)
return fild_retry
return warp_func
这个装饰器可以通过传入重试次数(times)和重试等待时间(wait_time)。
网友评论