2014-02-12 56 views
2

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

我发现在计算器上lambda函数里的人写了lambda函数出在“没有功能”的方式比较的解释,但我真的不明白哪些部分是相当于哪些部分。

感谢

回答

6

一个lambda是一个内联函数,这样你就可以把它改写了普通的是这样的:

def sortkey(tup): 
    return tup[1] 

sorted(list_of_tuples, key=sortkey) 

现在你看到的tup前结肠是参数的功能,并tup[1]返回第二个元素(首先是tup[0]

T他的lambda是排序函数的key,这意味着您按list_of_tuples的每个元素的第二个排序。 sorted()通行证的每个元素到key功能,通过的返回值的排序所述功能

正如所指出的@kojiro,一个内置的功能的模块operator在此存在,称为itemgetter。你传递一个索引到函数,并返回一个函数,它做你的拉姆达做什么

示例演示了如何一键时才调用:

>>> def sortkey(x): 
...  print x 
...  return x 

>>> inputlist = range(5) 
>>> random.shuffle(inputlist) 
>>> sorted(inputlist, key=sortkey) 
0 
3 
4 
2 
1 
[0, 1, 2, 3, 4] 
+1

另一种方式来写这个拉姆达将是['operator.itemgetter(1)'](HTTP://docs.python。组织/ 2 /库/ operator.html#operator.itemgetter)。 – kojiro

+1

非常真实,但不是OP的问题 – mhlester

+1

没错,但对未来的读者可能有用,他们偶然发现这个答案。 – kojiro

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>