【问题标题】:python decorator, decorate a recursive function to run it many timespython装饰器,装饰一个递归函数运行多次
【发布时间】:2014-05-21 01:14:44
【问题描述】:

我有一个递归函数(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 是递归的。


Decorating recursive functions in python这个帖子也有类似的问题,可能这里不是使用装饰器的好地方?

【问题讨论】:

  • 请澄清——当您调用f(x) 时,您的函数会被无限次调用?当我运行你的代码时,我没有得到这种行为。 f(x) 我只被调用了 10 次。
  • 是的,你是对的,很抱歉造成混乱,我会删除问题。
  • 问题是因为f是递归函数造成的。

标签: python python-decorators


【解决方案1】:

这应该可以工作

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

@iter_f
def f(x):

【讨论】:

    【解决方案2】:

    试试这个:

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

    【讨论】:

      猜你喜欢
      • 2022-01-01
      • 2020-05-20
      • 2020-01-05
      • 2021-09-10
      • 1970-01-01
      • 2012-06-01
      • 2019-08-02
      • 1970-01-01
      相关资源
      最近更新 更多