декоратор python, украсьте рекурсивную функцию, чтобы запускать ее много раз

У меня есть рекурсивная функция (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), я вызываю функцию, которая повторяет себя бесконечное количество раз. Мне любопытно, какое решение все еще использует декоратор, без обертывания f внутри новой функции g и декорирования g.

Спасибо.


Спасибо, что указали, что проблема возникла из-за того, что f является рекурсивным.


Декорирование рекурсивных функций в python в этом посте аналогичная проблема, возможно, это не очень хорошо место для использования декоратора?


person fast tooth    schedule 21.05.2014    source источник
comment
Уточните, пожалуйста, когда вы вызываете f(x), ваша функция вызывается бесконечное количество раз? Я не получаю такого поведения, когда запускаю ваш код. f(x) мне звонят всего 10 раз.   -  person huu    schedule 21.05.2014
comment
да, вы правы, извините за сумбур, удалю проблему.   -  person fast tooth    schedule 21.05.2014
comment
Проблема была вызвана тем, что f является рекурсивной функцией.   -  person fast tooth    schedule 21.05.2014


Ответы (2)


Это должно работать

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

@iter_f
def f(x):
person Tyler McAtee    schedule 21.05.2014

Попробуй это:

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)
    ...
person Vinayak Kaniyarakkal    schedule 31.03.2015