Yai*_*aon 3 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
Run Code Online (Sandbox Code Playgroud)
我不想这样做
c.f = lambda x: func(x) + 1
Run Code Online (Sandbox Code Playgroud)
因为我想以c.f同样的方式不止一次地改变.
无限递归正在发生,因为在lambda函数内部,c.f在调用时解析,因此它已经是"新" lambda函数而不是传递给的原始函数cls.__init__.
你可以这样做:
c.f = lambda x, f=c.f: f(x) + 1
Run Code Online (Sandbox Code Playgroud)
由于在创建lambda函数时会计算参数default,因此它将是类中的原始函数.
| 归档时间: |
|
| 查看次数: |
476 次 |
| 最近记录: |