lambda函数调用2个额外的lambda函数

时间:2018-01-31 00:09:47

标签: python-3.x lambda

我刚刚在Python中学习Lambda函数,并对这里发生的事情感到困惑。

z = 3
e = lambda x: lambda y: lambda: x + y + z
e(0)(1)()
"returns 4"

f = lambda z: x + z
f(3)
"returns ?"

我有点理解第一个lambda链在正常def语句和每个def语句之外重写了它,返回刚刚定义的函数...

def i(x):
    def j(y):
        def k(z):
            return x + y + z
        return k(z)
    return j(y)

但我不确定f = lambda z:x + z是如何在这里工作的

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

你对第一批lambdas的翻译并不完全正确。它应该是:

def i(x):
    def j(y):
        def k():               # no z argument
            return x + y + z
        return k               # return the function k, without calling it
    return j                   # same here, just return j without calling it

当您使用i(0)(1)()调用它时,此功能正常。在内部函数xy中查找包含的范围(查找01),z被查找为全局变量

你的第二个lambda相当于:

def g(z):
    return x + z

这不起作用,因为x未定义为全局。如果您将z参数重命名为x,那么它将起作用,因为返回的总和中的z将是前一代码使用的全局z和{{ 1}}将是争论。如果lambda适合您,您必须定义一个x全局,但您尚未在代码段中显示。