【发布时间】:2018-03-04 23:48:49
【问题描述】:
下面是python中的装饰器示例。我不太明白它对双重装饰的装饰器的实际工作原理。
from functools import update_wrapper
def decorator(d):
print(d.__name__)
return lambda fn: update_wrapper(d(fn),fn)
decorator=decorator(decorator) #I don't understand how this works.
@decorator
def n_ary(f):
print(f.__name__)
def n_ary_f(x,*args):
return x if not args else f(x,n_ary_f(*args))
return n_ary_f
@n_ary
def seq(x,y):return ('seq',x,y)
看来流程应该是(我不确定):
decorator被修饰,所以它返回lambda fn: update_wrapper(decorator(fn),fn)。n_ary=decorator(n_ary),然后n_ary由于update_wrapper(decorator(n_ary),n_ary)的功能而更新第三部分应该是seq的更新,不过不明白
update_wrapper这个函数什么时候用的。
【问题讨论】:
-
请问您在哪里找到的?这是一个试图变得太聪明而没有收获的人,我很想看看他们的动机是什么。
标签: python python-3.x python-decorators