加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

在python中使用lambda的无限递归

发布时间:2020-12-20 11:36:56 所属栏目:Python 来源:网络整理
导读:我上课了.该类包含一个函数.我希望每隔一段时间以相同的方式更改此功能.如果我使用lambda,我会得到无限的递归.我理解为什么我会这样,我想找到一个优雅的解决方案. def func(s): return 1 # some not interesting functionclass cls: # a class def __init__(
我上课了.该类包含一个函数.我希望每隔一段时间以相同的方式更改此功能.如果我使用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函数时会计算参数default,因此它将是类中的原始函数.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读