在下面的代码中,我很难理解返回值是如何在函数范围之间移动的。
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
.
如果还有什么不清楚的地方,请告诉我是哪一部分。
关于Python - 帧之间的返回值偏移,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55203191/