python - 如何防止 lambda 函数递归调用自身?

标签 python lambda

在我的代码中,我首先定义了两个 lambda 函数:

func1 = lambda x: x + 2
func2 = lambda x: x * 2

稍后在我的代码中,我想创建一个 lambda 函数来添加上面两个 lambda 函数的结果,但是这个函数必须与上面的函数之一同名。也就是说,我想做这样的事情:

func2 = lambda x: func1(x) + func2(x)

注意函数名称 func2 再次出现。

我知道这很愚蠢,还有其他方法可以达到相同的预期结果。然而,这个例子只是我试图实现的一个非常简化的版本。但是,这行不通,因为它给我错误:

RecursionError: maximum recursion depth exceeded

我认为那是因为 func2 一直在调用自己。有没有办法防止这种情况发生?我无法更改名称 func1func2(请注意,这也意味着我无法创建两个名称不同但内容相同的新函数)。我试过这样的事情

func2Copy = lambda x: func2(x)
func1Copy = lambda x: func1(x)
func2 = lambda x: func1Copy(x) + func2Copy(x)

但看到了同样的错误(正如预期的那样)。我尝试做的事情可行吗?

最佳答案

你可以使用一些间接的

func2 = (lambda f1, f2: lambda x: f1(x) + f2(x))(func1, func2)

那么

>>> func2(1)
5

虽然这有点愚蠢 - 简而言之,您需要另一个功能。

关于python - 如何防止 lambda 函数递归调用自身?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49806456/

相关文章:

c# - 使用 Lambda OrderBy Comparer 为特定字符串值赋予权重

mysql - AWS Lambda 不执行 node.js MySQL 查询

python - Numpy 数组改变 id

python - 如何在python中更新全局变量

python - 'type' 类型的参数不可迭代

python - 磁盘读取会减慢 MySQL 中的 INSERT 速度

c# - 在自引用表中查找顶级实体

Python Pandas 创建一长串数据框以进行连接

c# - 将 IP 字符串列表排序为具有空白条目的数字

c# - 如何在 linq 连接 (lambda) 上添加 where 子句?