Python - 帧之间的返回值偏移

标签 python python-3.x variables frame

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

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

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

最佳答案

  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 , 作为 y已被重新分配给该值。所以y还返回 7 .

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

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

关于Python - 帧之间的返回值偏移,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55203191/

相关文章:

python - 在 poke 游戏的技巧中迭代元组时更新 defaultdict

mysql - MySQL UPDATE 查询中的 "intermediate"变量

python - 为什么我的所有进程不是同时启动?

python - 解释大的运行时变化

python - bsddb3-6.0.1 Windows7 构建错误 : _bsddb. obj:错误 LNK2019:函数 newDBObject 中引用的未解析外部符号 db_create

jquery - 检索字典值 jinja

python-2.7 - Python Pandas Dataframe 合并并仅选择几列

python - 是否有可能知道 chr 使用 Python 接受的最大数量?

python - 为什么我的代码给出了错误的变量值?

javascript - 如何在脚本中使用变量作为 DOM 对象