lambda函数什么时候比定义更好?

时间:2014-08-15 13:49:59

标签: python lambda python-2.x

我最近在答案代码中使用lambda看到了很多答案。

我理解定义函数和使用lambda之间的区别。

def add(x): 
    return x + 10

adding = lambda x:x ++ 10

我知道两者都会提供完全相同的结果,lambda也不需要链接到变量。

我感到困惑的是使用lambda而不是函数在哪里有用?

我已经阅读了文档等,并且可以理解这些差异,但是在一个比另一个更有用的情况下,我有点难过。

3 个答案:

答案 0 :(得分:1)

lambda可能比使用def更可取的一种情况是你需要将一次性函数作为参数传递,因为你可以将lambda直接放在函数调用中。

答案 1 :(得分:1)

lambda表达式通常用于定义匿名函数,其中不需要将函数绑定到(全局)名称。例如,如果您只需要一个函数作为key参数传递给sorted

sorted(some_list, key=lambda x: x[2])

有些人认为对一个简短函数的名称的显式赋值在一行上比在def语句执行的隐式赋值看起来更好,但这纯粹是基于美学的意见对实际代码没有影响。

两者之间最大的区别是def是一个语句,其主体可以包含任意Python代码,而lambda是一个表达式,其主体必须是隐式返回的单个表达式。鉴于此限制,使用def通常更有用,lambda有用的许多情况正由其他功能处理。

虽然Python认为函数是第一类对象,但实际上的事情相对较少:你可以调用它们,并存储对它们的引用。不支持其他操作(例如组合或逐点应用 - 例如,h=f+g表示h(x) = f(x) + g(x)对所有x)。如果支持这样的操作,则会有更多用于创建函数对象的表达式

答案 2 :(得分:0)

lambdas通常用于函数式编程。在Python中,lambda函数与mapreducefilter等功能概念结合使用。

使用deflambda添加功能会产生类似的结果。 请注意,lambda定义不包含" return" statement - 它总是包含一个返回的表达式。另请注意,您可以将lambda定义放在预期函数的任何位置,并且您根本不必将其分配给变量。

在现代Python中,列表推导取代了对map,filter和类似函数的需求, 并且lambda的使用有点被弃用。

创建一个新函数来调用另一个已经设置了一些预定义参数的函数有时非常有用:

def foo(x,y):
  return x*y

想象一下,你想将x修复为5,你可以随时创建一个新的函数 lambda

foo_with_fixed_x = lambda y: foo(5,y)

但即使在这种情况下,最好依赖functools模块(查看functools.partial):

import functools
foo_with_fixed_x = functools.partial(foo, 5)