前几天,我写了一个类似于以下内容的lambda:
fetch = lambda x: myDictionaryVariable.get(x, "")
但现在我刚刚了解到,您可以用;
而不是换行符来分隔python语句,然后了解到即使使用冒号,也可以在一行上执行简单的语句。所以我意识到我也可以写这个:
并不是说我在这里使用;
,但是如果我需要的话,我可以为我的单线函数提供更多的功能。我可以写:
def strangeFetch(x): y = "unicorn"; return menu.get(x, y)
那为什么我需要兰姆达斯呢?为什么它们甚至是python的一部分?鉴于此,他们补充了什么?在
当您想将匿名函数用作另一个函数的参数时,
lambda
非常有用。如果它只在那一个地方使用,就不需要为它指定名称。在将lambda赋给变量的能力超出了语言的正交性:变量可以保存任何类型的值,而lambda创建的函数只是一个值。在
Lambda函数不需要名称。它们不会仅仅为只使用一次的函数阻塞命名空间。在
如您所见,尽管我们创建了一个lambda函数(在本例中,我们可以直接使用
len
),但它并没有添加到本地命名空间中。它们是使用和抛出类型的函数。它们可以在使用它们的行之后被GCed,除非它们被分配给一些变量。
它们不允许任何python语句和赋值,因此它们的副作用很小。在
^{pr2}$这将引发一个错误,
SyntaxError: can't assign to lambda
。(你可以改变可变对象)。有时,它们可以用来克服闭包的影响。
lambda表达式本身就是一个值,def语句不是这样的。这是因为def语句本质上是一个函数文本+赋值,而在Python中赋值不是表达式。在
但你不需要lambdas。你能用一个命名函数做的一切。在
相关问题 更多 >
编程相关推荐