首页 > 解决方案 > 这个 Python 表达式的输出是如何生成的?

问题描述

有人可以解释这个表达式的输出是什么以及它是如何生成的。我知道我可以把它放在 IDLE 中并检查输出,但我想学习如何手动操作。具体来说,想知道print语句是如何一步步执行的。

def f(x):
    return lambda y: (x, y(x))
def g(y):
    return lambda x: x(y)
print(g(2)(f)(lambda x:x+1))

标签: pythonlambda

解决方案


这都是纯函数式代码(除了print它本身),所以我们可以使用替换来可视化正在发生的事情:

print(g(2)(f)(lambda x:x+1))
#     ^^^^

第 1 步:调用gwith 2, bindingg的参数y2...

def g(y):  # y = 2
    return lambda x: x(y)

...给lambda x: x(2)

print((lambda x: x(2))(f)(lambda x:x+1))
#     ^^^^^^^^^^^^^^^^^^^

第 2 步:使用...调用lambda函数(从 中返回gf

(lambda x: x(2))  # x = f
#          ^^^^

...反过来调用f...2

def f(x):  # x = 2
    return lambda y: (x, y(x))

...给lambda y: (2, y(2))

print((lambda y: (2, y(2)))(lambda x:x+1))
#     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

第 3 步:使用...调用lambda函数(f通过 other返回lambdalambda x:x+1

(lambda y: (2, y(2))  # y = lambda x:x+1
#              ^^^^

... give (2, (lambda x:x+1)(2)),这反过来又用...调用参数lambda函数2

lambda x:x+1  # x = 2

...给3,然后将其合并到外部的结果中lambda,给(2, 3)

print((2, 3))
#^^^^^^^^^^^^

这最终print是被调用的点,传递一个元组作为参数。


推荐阅读