Python 为什么递归lambda函数中的列表选择会抛出递归限制错误?

Python 为什么递归lambda函数中的列表选择会抛出递归限制错误?,python,python-2.7,recursion,lambda,Python,Python 2.7,Recursion,Lambda,考虑以下两个递归函数,它们计算我天真地认为是相同的输入的阶乘: fact=lambda x:1如果x==0,那么x*fact(x-1) fact=lambda x:[x*fact(x-1),1][x==0] 第一个运行正常,但第二个给我错误RuntimeError:超过了最大递归深度。对于x==0和x=0 为什么lambda函数不能处理第二种情况?它们不一样。在第二个变量中,对列表中的两个表达式进行求值,然后才从中选择适当的表达式。但这并不能阻止递归的发生,即使x==0。因此,递归继续进行,直到

考虑以下两个递归函数,它们计算我天真地认为是相同的输入的阶乘:

  • fact=lambda x:1如果x==0,那么x*fact(x-1)

  • fact=lambda x:[x*fact(x-1),1][x==0]

  • 第一个运行正常,但第二个给我错误
    RuntimeError:超过了最大递归深度
    。对于
    x==0
    x=0


    为什么lambda函数不能处理第二种情况?

    它们不一样。在第二个变量中,对列表中的两个表达式进行求值,然后才从中选择适当的表达式。但这并不能阻止递归的发生,即使
    x==0
    。因此,递归继续进行,直到负数碰到内存限制


    。。。如果。。。另一方面,else…
    将首先计算
    if
    关键字后面的条件,并仅计算与该结果对应的表达式。

    它们不相同。在第二个变量中,对列表中的两个表达式进行求值,然后才从中选择适当的表达式。但这并不能阻止递归的发生,即使
    x==0
    。因此,递归继续进行,直到负数碰到内存限制

    。。。如果。。。另一方面,else…
    将首先计算
    if
    关键字后面的条件,并仅计算与该结果对应的表达式