f = lambda n:(1,f(n-1)* n)[n> 1]在Python 3中给出RunTimeError

时间:2015-07-30 15:05:38

标签: python python-3.x lambda

我在Python 3中打了一个阶乘函数,但我的lambda不起作用:

f = lambda n:(1,f(n-1)*n)[n>1]

它引发了这个错误:

File "<stdin>", line 1, in <lambda>
File "<stdin>", line 1, in <lambda>
File "<stdin>", line 1, in <lambda>
# Many other identical lines...
RuntimeError: maximum recursion depth exceeded

问题出在哪里?

1 个答案:

答案 0 :(得分:3)

元组不会被懒惰地评估。即使f(0)将选择元组(1, f(-1)*0)中的第一个元素,它仍然必须先调用f(-1)才能执行此操作。在f(-1)可以返回之前,它必须调用f(-2),依此类推。

请考虑使用内联条件,执行延迟评估,直到它知道它将要关闭哪个分支。

f = lambda n:1 if n <= 1 else f(n-1)*n
print f(10)