我得到了以下代码:
g = lambda x: x+7
foo = lambda f: (lambda x: f(x+1)*2)
print( g(3), (foo(g))(3), (foo(foo(g))((3) )
我可以解释一下(foo(foo(g))((3)
是如何工作的吗?
首先要记住的是,lambda
是常规函数,它:
- 不要自动拥有名称
- 可用作表达式
- 必须由单个表达式组成
- 隐式
return
该表达式的结果
因此,如果您感到困惑,您可以随时将它们重写为带有名称的普通def
函数。例如,foo
可以变成:
def foo(f):
def foo_inner(x):
return f(x + 1) * 2
return foo_inner
因此,使用任何函数(f
(调用foo
都会返回一个新函数,该函数采用数字类型,向其添加一个,使用值调用f
,并将结果加倍。
其余的只是在这里追踪多层包装,我将留给您;一般来说,这不是一个有趣的问题。在使用此类工厂函数的实际代码中,意图和行为通常要清晰得多(因为它是出于某种目的,而不是作为脑筋急转弯(。