lambda函数可以在Python中递归地调用自己吗?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (49)

正则函数可以在其定义中包含对自身的调用,没有问题。我不知道如何使用lambda函数来实现它,但原因很简单,即lambda函数没有可引用的名称。有办法吗?怎么做?

提问于
用户回答回答于

我能想到的唯一方法就是给这个函数取一个名字:

fact = lambda x: 1 if x == 0 else x * fact(x-1)

或者,对于早期版本的python:

fact = lambda x: x == 0 and 1 or x * fact(x-1)

更新利用其他答案中的想法,我能够将阶乘函数嵌入到一个未命名的lambda中:

>>> map(lambda n: (lambda f, *a: f(f, *a))(lambda rec, n: 1 if n == 0 else n*rec(rec, n-1), n), range(10))
[1, 1, 2, 6, 24, 120, 720, 5040, 40320, 362880]

所以这是可能的,但不是真正的推荐!

用户回答回答于

如果没有还原,则映射,命名为lambdas或python内部组件:

(lambda a:lambda v:a(a,v))(lambda s,x:1 if x==0 else x*s(s,x-1))(10)

扫码关注云+社区

领取腾讯云代金券