Python中lambda函数与def函数的关联及嵌套调用代码执行流程解析
拆解这段嵌套函数代码的执行逻辑
我来一步步帮你捋清楚这段代码的执行过程,以及def和lambda之间的关联~
先搞懂基础:def和lambda的关联
首先要明确:def是用来定义具名函数的关键字,而lambda是用来创建匿名函数的语法。两者本质都是生成函数对象,区别只是lambda更简洁,通常用于简单的单行逻辑,而且可以作为返回值被其他函数(比如这里的def函数)返回。
当一个def函数返回lambda时,这个lambda会形成闭包——简单说就是它会“记住”外层def函数里的变量值,即使外层函数执行结束,lambda依然能访问这个变量。
一步步拆解print(func1(3)(1))的执行流程
我们从最外层的调用开始,逐层往里拆:
第一步:调用func1(3)
当你传入参数3给func1时,func1里的x被赋值为3。然后func1返回一个lambda函数:
lambda y : (func(x)(x)+y+1)
注意这里的x已经被绑定为3了(闭包的特性),这个lambda会牢牢记住x=3,等着后续被调用。
第二步:用参数1调用第一步得到的lambda
现在我们把1传给这个lambda的y,接下来要计算表达式func(x)(x)+y+1:
- 这里的
x是闭包记住的3,y是刚传入的1,所以先算func(3)(3)。
子步骤:计算func(3)(3)
- 先调用
func(3):func里的x被赋值为3,返回另一个lambda函数:
同样,这个lambda通过闭包记住了lambda y: (x + y + 1)x=3。 - 再用参数
3调用这个lambda:代入x=3、y=3,计算3+3+1=7。
第三步:完成最终计算
回到func1返回的lambda的表达式:7 + 1 + 1 = 9,所以最终print输出的结果就是9。
总结一下核心逻辑
这段代码是函数嵌套调用+闭包的典型例子:
func和func1都是用def定义的函数,它们的返回值都是lambda匿名函数;- 每一层返回的lambda都会捕获外层函数的变量(x的值),形成闭包;
- 调用的时候是“先拿到内层lambda,再传入参数执行”的套娃过程,最终一步步计算出结果。
内容的提问来源于stack exchange,提问作者Jorge Contel
相关产品推荐
相关产品推荐

