我有以下的装潢师(根据
https://realpython.com/primer-on-python-decorators/#decorators-with-arguments
):
def slow_down(_func=None, rate = 1):
def decorator(func):
print(_func) # Added for understanding?
@functools.wraps(func)
def wrapper(*args, **kwargs):
time.sleep(rate)
return func(*args, **kwargs)
return wrapper
if _func==None:
return decorator
else: return decorator(_func)
我的问题是,这个不应该
slow_down
函数初始化方式
_func = None
?但是,当我用decorator创建一个函数时,我得到一个初始化的func值:
@slow_down
def countdown(time = 5):
print(time)
if time == 0: pass
else: countdown(time-1)
<function countdown at 0x7f1aa0a8da60>
但是当我初始化函数的值时,我得到
None
:
@slow_down(rate=2)
def countdown(time = 5):
print(time)
if time == 0: pass
else: countdown(time-1)
None
不是应该换个方向吗?