Python嵌套lambda表达式代码运行逻辑及参数绑定规则求解析
Python lambda嵌套调用逻辑分步拆解
原运行代码如下:
def foo(y): return lambda x: x(x(y)) def bar(x): return lambda y: x(y) print((bar)(bar)(foo)(2)(lambda x:x+1))
我们按照从左到右的调用顺序逐段拆解,所有参数均为当前函数的局部作用域变量,同名参数不同层级指代完全不同:
- 第一步:执行
bar(bar)- 本次
bar函数的入参x绑定为bar函数本身 - 按
bar的定义,返回匿名函数:lambda y: bar(y)
- 本次
- 第二步:将第一步返回的匿名函数传入参数
foo执行,即(lambda y: bar(y))(foo)- 本次匿名函数的入参
y绑定为foo函数 - 执行逻辑为
bar(y),等价于bar(foo) - 本次
bar函数的入参x绑定为foo函数,返回匿名函数:lambda y: foo(y)
- 本次匿名函数的入参
- 第三步:将第二步返回的匿名函数传入参数
2执行,即(lambda y: foo(y))(2)- 本次匿名函数的入参
y绑定为整数2 - 执行逻辑为
foo(y),等价于foo(2) - 本次
foo函数的入参y绑定为整数2,返回匿名函数:lambda x: x(x(2))
- 本次匿名函数的入参
- 第四步:将第三步返回的匿名函数传入参数
lambda x:x+1执行(我们临时命名该函数为add1方便理解,功能是返回入参+1),即(lambda x: x(x(2)))(add1)- 本次匿名函数的入参
x绑定为add1函数 - 执行逻辑为
x(x(2)),等价于add1(add1(2)) - 先计算内层
add1(2)得到3,再计算add1(3)得到4
- 本次匿名函数的入参
最终print输出的结果为4。
内容的提问来源于stack exchange,提问作者user16984591
相关产品推荐
相关产品推荐

