这个Python表达式的输出是如何生成的?
有人能解释一下这个表达式的输出是什么以及它是如何生成的吗。我知道我可以将其置于空闲状态并检查输出,但我想学习如何手动执行。具体来说,我想知道print语句是如何一步一步执行的这个Python表达式的输出是如何生成的?,python,lambda,Python,Lambda,有人能解释一下这个表达式的输出是什么以及它是如何生成的吗。我知道我可以将其置于空闲状态并检查输出,但我想学习如何手动执行。具体来说,我想知道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)) 这都是纯功能代码(除了打印本身),因此我们可以使用替换来可视化正在发生的事情: print(g(2)(f)(l
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))
这都是纯功能代码(除了打印本身),因此我们可以使用替换来可视化正在发生的事情:
print(g(2)(f)(lambda x:x+1))
# ^^^^
步骤1:使用2
调用g
,将g
的参数y
绑定到2
def g(y): # y = 2
return lambda x: x(y)
(lambda x: x(2)) # x = f
# ^^^^
def f(x): # x = 2
return lambda y: (x, y(x))
(lambda y: (2, y(2)) # y = lambda x:x+1
# ^^^^
lambda x:x+1 # x = 2
。。。给出λx:x(2)
步骤2:使用f
调用lambda
函数(从g
返回)
def g(y): # y = 2
return lambda x: x(y)
(lambda x: x(2)) # x = f
# ^^^^
def f(x): # x = 2
return lambda y: (x, y(x))
(lambda y: (2, y(2)) # y = lambda x:x+1
# ^^^^
lambda x:x+1 # x = 2
。。。依次调用f
和2
def g(y): # y = 2
return lambda x: x(y)
(lambda x: x(2)) # x = f
# ^^^^
def f(x): # x = 2
return lambda y: (x, y(x))
(lambda y: (2, y(2)) # y = lambda x:x+1
# ^^^^
lambda x:x+1 # x = 2
。。。给出λy:(2,y(2)):
步骤3:使用lambda x:x+1
调用lambda
函数(从f
通过另一个lambda
返回)
def g(y): # y = 2
return lambda x: x(y)
(lambda x: x(2)) # x = f
# ^^^^
def f(x): # x = 2
return lambda y: (x, y(x))
(lambda y: (2, y(2)) # y = lambda x:x+1
# ^^^^
lambda x:x+1 # x = 2
。。。给出(2,(lambda x:x+1)(2))
,这反过来调用带有2
的参数lambda
函数
def g(y): # y = 2
return lambda x: x(y)
(lambda x: x(2)) # x = f
# ^^^^
def f(x): # x = 2
return lambda y: (x, y(x))
(lambda y: (2, y(2)) # y = lambda x:x+1
# ^^^^
lambda x:x+1 # x = 2
。。。给出3
,然后将其合并到外部lambda
的结果中,给出(2,3)
:
这是调用
print
的最后一个点,将元组作为参数传递。这都是纯功能代码(除了print
本身),因此我们可以使用替换来可视化正在发生的事情:
print(g(2)(f)(lambda x:x+1))
# ^^^^
步骤1:使用2
调用g
,将g
的参数y
绑定到2
def g(y): # y = 2
return lambda x: x(y)
(lambda x: x(2)) # x = f
# ^^^^
def f(x): # x = 2
return lambda y: (x, y(x))
(lambda y: (2, y(2)) # y = lambda x:x+1
# ^^^^
lambda x:x+1 # x = 2
。。。给出λx:x(2)
步骤2:使用f
调用lambda
函数(从g
返回)
def g(y): # y = 2
return lambda x: x(y)
(lambda x: x(2)) # x = f
# ^^^^
def f(x): # x = 2
return lambda y: (x, y(x))
(lambda y: (2, y(2)) # y = lambda x:x+1
# ^^^^
lambda x:x+1 # x = 2
。。。依次调用f
和2
def g(y): # y = 2
return lambda x: x(y)
(lambda x: x(2)) # x = f
# ^^^^
def f(x): # x = 2
return lambda y: (x, y(x))
(lambda y: (2, y(2)) # y = lambda x:x+1
# ^^^^
lambda x:x+1 # x = 2
。。。给出λy:(2,y(2)):
步骤3:使用lambda x:x+1
调用lambda
函数(从f
通过另一个lambda
返回)
def g(y): # y = 2
return lambda x: x(y)
(lambda x: x(2)) # x = f
# ^^^^
def f(x): # x = 2
return lambda y: (x, y(x))
(lambda y: (2, y(2)) # y = lambda x:x+1
# ^^^^
lambda x:x+1 # x = 2
。。。给出(2,(lambda x:x+1)(2))
,这反过来调用带有2
的参数lambda
函数
def g(y): # y = 2
return lambda x: x(y)
(lambda x: x(2)) # x = f
# ^^^^
def f(x): # x = 2
return lambda y: (x, y(x))
(lambda y: (2, y(2)) # y = lambda x:x+1
# ^^^^
lambda x:x+1 # x = 2
。。。给出3
,然后将其合并到外部lambda
的结果中,给出(2,3)
:
这是调用print
的最后一个点,将元组作为参数传递