为什么使用lambdas vs 1line函数声明?

2024-10-01 13:35:07 发布

您现在位置:Python中文网/ 问答频道 /正文

前几天,我写了一个类似于以下内容的lambda:

fetch = lambda x: myDictionaryVariable.get(x, "")

但现在我刚刚了解到,您可以用;而不是换行符来分隔python语句,然后了解到即使使用冒号,也可以在一行上执行简单的语句。所以我意识到我也可以写这个:

^{pr2}$

并不是说我在这里使用;,但是如果我需要的话,我可以为我的单线函数提供更多的功能。我可以写:

def strangeFetch(x): y = "unicorn"; return menu.get(x, y)

那为什么我需要兰姆达斯呢?为什么它们甚至是python的一部分?鉴于此,他们补充了什么?在


Tags: lambda函数功能getdef语句fetchunicorn
3条回答

当您想将匿名函数用作另一个函数的参数时,lambda非常有用。如果它只在那一个地方使用,就不需要为它指定名称。在

将lambda赋给变量的能力超出了语言的正交性:变量可以保存任何类型的值,而lambda创建的函数只是一个值。在

  1. Lambda函数不需要名称。它们不会仅仅为只使用一次的函数阻塞命名空间。在

    a = [[1], [1, 2], [1, 2, 3]]
    print min(a, key = lambda x:len(x))
    print locals()
    

    如您所见,尽管我们创建了一个lambda函数(在本例中,我们可以直接使用len),但它并没有添加到本地命名空间中。

  2. 它们是使用和抛出类型的函数。它们可以在使用它们的行之后被GCed,除非它们被分配给一些变量。

  3. 它们不允许任何python语句和赋值,因此它们的副作用很小。在

    ^{pr2}$

    这将引发一个错误,SyntaxError: can't assign to lambda。(你可以改变可变对象)。

  4. 有时,它们可以用来克服闭包的影响。

lambda表达式本身就是一个值,def语句不是这样的。这是因为def语句本质上是一个函数文本+赋值,而在Python中赋值不是表达式。在

但你不需要lambdas。你能用一个命名函数做的一切。在

相关问题 更多 >