Python3中嵌套lambda函数的求值逻辑解析求助
嵌套Lambda函数求值逻辑拆解
先把代码拆分,一步步梳理执行过程:
1. 明确f的作用
f = lambda x, y: lambda z: (x)(y)(z)
调用f(a, b)会返回一个匿名函数,这个函数接收参数z时,实际执行的是a(b)(z)——也就是先把b传给a得到一个新函数,再把z传给这个新函数。
2. 逐步执行result的调用
result = f(lambda x: lambda y: x, lambda z: z * 2)(3)(4)
第一步:执行f(lambda x: lambda y: x, lambda z: z * 2)
这里给f传入两个参数:
x = lambda x: lambda y: x(记为函数A)y = lambda z: z * 2(记为函数B)
f返回的匿名函数是:lambda z: A(B)(z)
第二步:调用返回的匿名函数并传入3,即执行A(B)(3)
- 先执行
A(B):把函数B传给函数A,此时函数A内部的参数x被绑定为函数B,函数A返回lambda y: x(记为函数C)。注意函数C的逻辑是不管传入什么y,都返回捕获到的x(也就是函数B)。 - 再执行
C(3):给函数C传入3,函数C直接返回函数B(lambda z: z*2),而不是用3去调用函数B。
这就是你之前分析的错误点:你误以为这里会执行B(3)得到6,但实际上函数C的作用是返回函数B本身,而不是执行它。
第三步:调用第二步的结果并传入4
第二步得到的是函数B,传入4后执行B(4),即4 * 2 = 8,这就是最终输出的结果。
内容的提问来源于stack exchange,提问作者Ben.K
相关产品推荐
相关产品推荐

