在下面的代码中,我在理解返回值如何在函数范围之间转换方面遇到了一些困难。
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运行我的代码以了解它是如何工作的,我不理解最后三个步骤。
如果有人能够告诉我这里发生的事情,我真的很感激。谢谢。
z
返回7
,因为在f2
(或在def y(z):
区域)范围内,y
指向lambda x: x+2
,而z
返回y(5)
。 y
在第4行分配。(这由第一张图片中的蓝色箭头表示)y
(或f2
)只返回函数z
(属于y
/ f2
的框架)返回的内容。不要被符号z(y)
欺骗。因为括号中的y
是lambda x: x+2
,因为y
已被重新分配给该值。所以y
也回归7
。x
(或f1
)返回属于y
(或x
)范围的f1
返回的内容。 y
(或x
)范围内的f1
恰好是f2
,它返回7
。所以x
或f1
,将返回7
。如果仍然不清楚,请告诉我哪个部分。