Python - return 帧之间的值偏移

Python - return value shift between frames

在下面的代码中,我很难理解 return 值是如何在函数范围之间移动的。

def x(y):
    def y(z):
        x = lambda x: x**2
        y = lambda x: x+2
        def z(x):
            return x(5)
        return z(y)
    return y(x)
print(x(lambda x: x+1))

我知道 return 值被评估为 7,因为 y = lambda x: x+2 被传递到 z(x),其中 5+2 = 7。我 运行 我的代码通过可视化Python以了解其工作原理,我不理解最后三个步骤。

第 16 步(共 18 步):

第 17 步(共 18 步):

第 18 步(共 18 步):

如果有人能告诉我这里发生了什么,我将不胜感激。谢谢。

  1. z returns 7因为在f2范围内(或者在def y(z):区域),y 指向 lambda x: x+2,以及 z returns y(5)y 在第 4 行赋值。(这由第一张图中的蓝色箭头表示)

  2. y(或f2)简单的说return是什么函数z(属于y的框架/ f2) returns。不要被符号 z(y) 欺骗了。因为括号中的 ylambda x: x+2,因为 y 已被重新分配给该值。所以 y return 也是 7.

  3. x(或f1)returns什么y属于x(或f1) returns。 x(或f1)范围内的y恰好是f2,而return是7。 所以xf1,会return7.

如果还有什么不清楚的,请告诉我是哪一部分。