首页 > 解决方案 > Python - 帧之间的返回值偏移

问题描述

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

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))

我知道返回值被评估为 7,因为y = lambda x: x+2它被传递到z(x)where 5+2 = 7。我通过 Visualize Python 运行我的代码以了解它是如何工作的,但我不了解最后三个步骤。

第 16 步(共 18 步): 在此处输入图像描述

第 17 步(共 18 步): 在此处输入图像描述

第 18 步(共 18 步): 在此处输入图像描述

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

标签: pythonpython-3.xvariablesframe

解决方案


  1. z返回7,因为在f2(或def y(z):区域中)的范围内,y指向 lambda x: x+2,并z返回y(5)y在第 4 行中分配。(这由第一张图像中的蓝色箭头表示)

  2. y(或f2)简单地返回函数z(属于y/的框架f2)返回的内容。不要被符号所欺骗z(y)。因为y括号中的lambda x: x+2, asy已重新分配给该值。所以y回报也7

  3. x(or f1) 返回y属于x(or f1) 范围的返回值。yx(or f1) 的范围内恰好是f2并且它返回7. 所以xf1,将返回7

如果仍有不清楚的地方,请告诉我是哪一部分。


推荐阅读