我有一个递归函数(f调用自身):
def f(x) :
....
我想多次运行此功能。我使用以下装饰器:
def iter_f(func) :
def newf(x):
for i in range(10):
func(x)
return newf
@iter_f
def f(x): a RECURSIVE function.
当我调用f(x)时,我正在调用一个无限次迭代的函数。我很好奇仍然使用装饰器的解决方案是什么,没有在新函数g中包装f,并装饰g。
感谢。
感谢您指出问题是由于f是递归的。
Decorating recursive functions in python这篇文章有类似的问题,也许这不是一个使用装饰器的好地方?
答案 0 :(得分:1)
这应该有效
def iter_f(func):
def newf(*args, **kwargs):
for i in range(10):
func(*args, **kwargs)
return newf
@iter_f
def f(x):
答案 1 :(得分:1)
试试这个:
def iter_f(func) :
def newf(x):
for i in range(10):
func(x)
newf._original = func
return newf
@iter_f
def f(x):
...
call f._original(y)
...