Python 装饰器,装饰递归函数以多次运行

0 投票
2 回答
599 浏览
提问于 2025-04-18 07:09

我有一个递归函数(也就是这个函数会自己调用自己):

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) 的时候,其实是在调用一个会无限次重复自己的函数。我很好奇有没有办法继续使用装饰器,而不需要把 f 包装在一个新的函数 g 里面,然后再给 g 加装饰器。

谢谢。


感谢你指出问题是因为 f 是递归的。


在 Python 中装饰递归函数 这篇文章有类似的问题,也许在这里使用装饰器并不是个好主意?

2 个回答

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)
    ...
1

这个应该可以工作

def iter_f(func):
    def newf(*args, **kwargs):
        for i in range(10):
            func(*args, **kwargs)
    return newf

@iter_f
def f(x):

撰写回答