请问这个lambda函数的解释?

时间:2014-02-12 18:40:19

标签: python lambda

我使用互联网上找到的代码中的sorted(list_of_tuples, key = lambda tup: tup[1])对元组列表进行了排序。我不明白lambda函数在这个命令中是如何工作的。 lambda函数是否返回元组的第一个索引?为什么tup代替tupletup之前的第一个:表示什么?是传入的参数吗? Lambda函数是否评估:的右侧并返回它?

我在StackOverflow上找到了lambda函数的解释,其中人们以“非功能”的方式将Lambda函数写出来进行比较,但我并不真正理解哪些部分等同于哪些部分。

由于

2 个答案:

答案 0 :(得分:6)

lambda是一个内联函数,所以你可以这样重写它:

def sortkey(tup):
    return tup[1]

sorted(list_of_tuples, key=sortkey)

现在你看到冒号之前的tup是函数的参数tup[1]返回第二个元素(首先是{ {1}})

这个lambda是sort函数的tup[0],这意味着你要按key的每个元素的第二个进行排序。 list_of_tuples将每个元素传递到sorted()函数中,通过所述函数的返回值对进行排序

正如@kojiro所指出的,key模块中存在一个内置函数,称为itemgetter。您将索引传递给该函数,并返回一个执行lambda执行操作的函数

演示如何仅调用一次键的示例:

operator

答案 1 :(得分:1)

The docs解释一下:

  

可以使用lambda关键字创建小型匿名函数。此函数返回其两个参数的总和:lambda a, b: a+b。 Lambda函数可以在需要函数对象的任何地方使用。它们在语法上限于单个表达式。从语义上讲,它们只是正常函数定义的语法糖。

所以,换句话说:

x = lambda AAAA: EEEE

几乎相当于

def x(AAAA):
    return EEEE

其中AAAA是参数,EEEE是表达式。

为什么几乎相同?因为底层函数对象具有不同的名称:在def情况下,它是x,而在lambda情况下,它是<lambda>