Python - 帧之间的返回值转换

问题描述 投票:2回答:1

在下面的代码中,我在理解返回值如何在函数范围之间转换方面遇到了一些困难。

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),其中5 + 2 = 7.我通过Visualize Python运行我的代码以了解它是如何工作的,我不理解最后三个步骤。

第16步,共18步:enter image description here

第17步,共18步:enter image description here

第18步,共18步:enter image description here

如果有人能够告诉我这里发生的事情,我真的很感激。谢谢。

python python-3.x variables frame
1个回答
1
投票
  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)欺骗。因为括号中的ylambda x: x+2,因为y已被重新分配给该值。所以y也回归7
  3. x(或f1)返回属于y(或x)范围的f1返回的内容。 y(或x)范围内的f1恰好是f2,它返回7。所以xf1,将返回7

如果仍然不清楚,请告诉我哪个部分。

© www.soinside.com 2019 - 2024. All rights reserved.