关于python:为什么使用lambdas vs 1-line函数声明?

Why use lambdas vs 1-line function declarations?

本问题已经有最佳答案,请猛点这里访问。

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

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

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

1
def fetch(x): return myDictionaryVariable.get(x,"")

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

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

那我干嘛要羔羊肉呢?为什么它们甚至是Python的一部分?鉴于此,他们还补充了什么?


  • Lambda functions don't need a name.他们不关闭你的名称空间只是为了一个只使用过一次的功能。

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

    如你所见,尽管我们创建了一个LAMBDA函数(在这个情况下,我们可以直接使用EDOCX1&1),但它不添加到本地名称。

  • 它们的使用和螺旋型功能。他们可能在他们所使用的线路之后被告知,但他们被指定为某些变量。

  • 他们不允许任何言论和传唤,因此他们可以信赖副作用。

    ZZU1

    这将纠正错误,SyntaxError: can't assign to lambda。(你可以变异的对象思考。)

  • 有时候,它们可以被用来克服封闭的影响。


  • 当你想使用匿名函数作为另一函数的参数时,它是有用的。如果这只是在某个地方使用的话,就没有必要为它指定一个名字。

    在语言正交性之外分配一个可变的LAMBDA的能力:一个可变的可变的可持有任何类型的值,而由LAMBDA创建的函数只是一个值。


    a lambda expression is itself a value,in a way that a def statement isn't.This is because a def statement is essentially a function literal+an assignment,and in python an assignment isn't an expression.

    但你不需要兰巴达你可以用一个名字的功能做任何事情。