Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Lambda函数转换_Python_Lambda - Fatal编程技术网

Python Lambda函数转换

Python Lambda函数转换,python,lambda,Python,Lambda,我一直在为一段我无法理解的python代码而挣扎。 这是一个嵌套的lambda函数,如下所示: lambda l: lambda x: x[0] in [None if not i.object else i.object.key for i in l] 我试着翻译它,我想出了这个,但我不认为这是正确的 def f1(l): def f2(x): for i in l: if not i.object:

我一直在为一段我无法理解的python代码而挣扎。 这是一个嵌套的lambda函数,如下所示:

lambda l: lambda x: x[0] in [None if not i.object else i.object.key for i in l]
我试着翻译它,我想出了这个,但我不认为这是正确的

 def f1(l):
     def f2(x):
           for i in l:
               if not i.object:
                  return None
               else
                  return x[0]

第1步:

def f1(l):
    def f2(x):
        xs = [None if not i.object else i.object.key for i in l]
        return x[0] in xs
    return f2
def f1(l):
    def f2(x):
        xs = []
        for i in l:
            if not i.object:
                xs.append(None)
            else:
                xs.append(i.object.key)
        return x[0] in xs
    return f2
第二步:

def f1(l):
    def f2(x):
        xs = [None if not i.object else i.object.key for i in l]
        return x[0] in xs
    return f2
def f1(l):
    def f2(x):
        xs = []
        for i in l:
            if not i.object:
                xs.append(None)
            else:
                xs.append(i.object.key)
        return x[0] in xs
    return f2

@citaret给出的公认答案很好,但其中一个方面到目前为止还没有弄清楚,那就是-为什么我们在函数中有一个函数,为什么不只是有
f1(l,x)

答案是,该函数可能被用作另一个函数的输入,该函数正好有一个参数,因此我们希望在函数中“捕获”列表
l
,因此我们在调用函数时只需要提供
x
(这称为“闭包”)

例如,我们可以创建一个函数
f
,它以列表
l
作为输入,并在
l
上返回一个新函数(闭包),该函数接受
x
,如果
x
l
中,则返回True:

f = lambda l: lambda x: x in l
然后我们可以创建一个函数
f2
,它是一个列表的闭包:

f2 = f([1, 2, 3])
现在我们可以将
f2
映射到另一个列表:

print map(f2, [2, 3, 4])
产生:

[True, True, False]
Python的
functools
模块提供了一个函数来帮助实现这一点,并可能使内部lambda的意图更加清晰,即我们可以将
f3
定义为:

f3 = functools.partial(lambda l, x: x in l, [1, 2, 3])
print map(f3, [2, 3, 4])

有关闭包的更全面描述,请参见答案。

这是错误的
lambda
s返回其主体的值。在这种情况下,外部lambda返回内部lambda,但这些函数不返回任何函数。。。您应该在
f1
定义的末尾返回f2。翻译非常简单。如果您有
lambda:
则必须将其替换为
def name(