如何解读与拆解Python复杂Lambda表达式?附NUS考题解析需求
拆解复杂Lambda与高阶函数:一步步推导NUS试卷题目结果
先看题目中的代码:
def combinator(y): return (lambda x: lambda y: x(y))(lambda x:y) combinator(lambda x:x*10)(11)(12)
我们分三步拆解整个调用过程:
1. 先分析combinator(y)的返回值
把combinator里的返回语句拆成两部分看:
- 外层Lambda:
lambda x: lambda y: x(y),这是一个接收参数x、返回另一个Lambda的函数。 - 传入的参数:
lambda x:y,这里的y是combinator函数的入参(注意:这个Lambda里的y属于外层combinator的作用域,不会被后续局部变量覆盖)。
当外层Lambda接收lambda x:y作为x后,返回lambda y: x(y)。代入x的实际值,这个返回的函数等价于:
lambda y: (lambda x: y)(y)
执行(lambda x: y)(y)时,虽然传入了参数,但它的返回值是外层combinator的y,和传入的参数无关。因此combinator(y)最终等价于:
def combinator(y): return lambda _: y
也就是返回一个忽略输入、直接返回y的函数。
2. 追踪combinator(lambda x:x*10)的结果
把lambda x:x*10作为y传入combinator,得到的返回值是:
lambda _: lambda x:x*10
这个函数不管接收什么参数,都会返回乘法函数lambda x:x*10。
3. 完成后续调用(11)(12)
- 调用
(11):给上面的函数传参数11,返回lambda x:x*10。 - 调用
(12):给乘法函数传12,计算得12*10=120。
整个调用链推导完成,最终结果为120。
内容的提问来源于stack exchange,提问作者muffinace
相关产品推荐
相关产品推荐

