请求解析Python表达式输出生成机制:分步讲解print语句执行
手动拆解嵌套lambda表达式的执行过程
咱们一步一步来拆解这个看起来有点绕的表达式,完全不用运行代码就能算出结果:
第一步:先看g(2)返回什么
先看g的定义:
def g(y): return lambda x: x(y)
当调用g(2)时,参数y被赋值为2,函数返回一个匿名lambda函数:lambda x: x(2)。这个lambda的逻辑很直白:接受一个参数x,然后执行x(2)(把2传给x,让x处理)。
第二步:分析g(2)(f)的结果
现在把第一步得到的lambda函数,传入参数f(就是题目里定义的那个f函数),这相当于直接执行f(2)。
再看f的定义:
def f(x): return lambda y: (x, y(x))
调用f(2)时,参数x被设为2,函数返回另一个匿名lambda函数:lambda y: (2, y(2))。这个lambda的作用是:接受一个参数y,返回一个元组——第一个元素是固定的2,第二个元素是调用y(2)得到的结果。
第三步:最终调用(lambda x:x+1)的结果
现在把第二步得到的lambda函数,传入参数lambda x:x+1(这是个简单的“输入x返回x+1”的函数)。
此时lambda里的y就是这个加1函数,那y(2)就是把2传进去,算出2+1=3。所以最终生成的元组是(2, 3),这就是print要输出的内容。
完整执行顺序梳理
print语句的分步执行其实是从最内层的函数调用开始,一层层往外解析:
- 先执行
g(2),得到lambda函数lambda x: x(2) - 用这个lambda调用
f,得到f(2)返回的lambda y: (2, y(2)) - 用这个lambda调用
lambda x:x+1,计算出元组(2, 3) - 最后
print把这个元组输出,结果就是(2, 3)
内容的提问来源于stack exchange,提问作者Hashir Gill
相关产品推荐
相关产品推荐

