一、根据用户传递的参数,动态修改装饰器的入参
二、实例:
import time,logging,random
def timeout(t):
def outter(func):
def inner(*args, **kwargs):
t0 = time.time()
res = func(*args, **kwargs)
t1 = time.time()
used = t1 - t0
if used >= t:
logging.error("{}:{}>{}".format(func.__name__, used, t))
return res
#修改装饰器参数方法
def set_timeout(new_timeout):
nonlocal t
t = new_timeout
inner.set_timeout = set_timeout
return inner
return outter
@timeout(1.5)
def f(i):
print("in f [{}]".format(i))
while random.randint(0, 1):
time.sleep(0.6)
f.set_timeout(1)
for x in range(1):
f(x)
原文:https://www.cnblogs.com/inflame/p/14841913.html