Python 在lambda语句中的for语句中使用if-else语句

Python 在lambda语句中的for语句中使用if-else语句,python,for-loop,if-statement,lambda,Python,For Loop,If Statement,Lambda,所以我知道这项工作: fac = lambda x: [element for element in x] 这也起作用: fac = lambda x: x*fac(x-1) if x!=0 else 1 但为什么这不起作用: fac = lambda *x : [ n * fac(n-1) if n!=0 else 1 for n in x] 我有一个无限循环。n*fac(n-1)如果输入为3,则创建以下列表:- [[[[1], [1]], [[1], [1]], [[1], [1]]

所以我知道这项工作:

fac = lambda x: [element for element in x]
这也起作用:

fac = lambda x: x*fac(x-1) if x!=0 else 1
但为什么这不起作用:

fac = lambda *x :  [ n * fac(n-1) if n!=0 else 1 for n in x]
我有一个无限循环。

n*fac(n-1)
如果输入为
3
,则创建以下列表:-

[[[[1], [1]], [[1], [1]], [[1], [1]]]]
您需要从列表中获取第一个元素,并将其与
n
相乘:-

fac = lambda *x :  [ n * fac(n-1)[0] if n!=0 else 1 for n in x]
print(fac(3))
输出-

[6]

当我单独运行最后一个示例时,没有无限循环。在上一个示例中,您如何调用
fac
?@mkrieger1 fac(1,2,3)给了我一个无限循环。但我不明白到底是什么原因goal@mkrieger1目标是计算一行中的阶乘