我有课。这个类包含一个函数。我想每隔一段时间以相同的方式更改此功能。如果我使用 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/