python - 在python中使用lambda进行无限递归

标签 python recursion lambda

我有课。这个类包含一个函数。我想每隔一段时间以相同的方式更改此功能。如果我使用 lambda,我会得到无限递归。我明白为什么我会得到这个,我想找到一个优雅的解决方案。

def func(s):
    return  1 # some not interesting function

class cls: # a class

    def __init__(self , f):
    self.f = f

c = cls(func)
c.f = lambda x: c.f(x) + 1 #  i want c.f to return c.f(x) + 1
print(c.f(1)) # causes infinite recursion

我不想做

c.f = lambda x: func(x) + 1 

因为我想不止一次以同样的方式改变c.f

最佳答案

无限递归的发生是因为在 lambda 函数内部,c.f 在调用时被解析,所以它已经是“新的”lambda 函数而不是原始函数传递给 cls.__init__

可以做这样的事情:

c.f = lambda x, f=c.f: f(x) + 1

由于默认参数是在创建 lambda 函数时计算的,因此它将是类中的原始函数。

关于python - 在python中使用lambda进行无限递归,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25083215/

相关文章:

python - SQLAlchemy : can't make event. listens.for() 工作

c++ - 从python调试VS2010中的c++ dll

c++ - 递归生成任意长度的所有 “words”

python - 如何改进python后缀数组中的lambda表达式

c# - c# linq lambda 使用多列加入三个列表

c++ - std::function lambda 优化

python - 获取数组中按钮的索引(按下时)

Java map 适配器在 Python 中等效于使用 wsdl

c++ - 嵌套 for 循环递归

javascript - 如何创建递归对象树数组以供以后迭代?