16

可能重复:
sorted(key=lambda :) 后面的语法

我正在浏览文档并遇到了这个例子:

> student_tuples = [
      ('john', 'A', 15),
      ('jane', 'B', 12),
      ('dave', 'B', 10), ]

> sorted(student_tuples, key=lambda student: student[2])  # sort by age 
[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]

我不明白这里的 lambda 和 student 是什么?它们可以用任何其他名称代替吗?在:做什么student:student[2]?这有点模棱两可,因为我以前从未遇到过。

4

2 回答 2

36

从语义上讲,这:

print sorted(student_tuples, key=lambda student: student[2])

与此相同:

def sort_key(student):
    return student[2]

print sorted(student_tuples, key=sort_key)

lambda只是为函数定义提供了另一种语法。结果是一个函数对象,就像由def. 然而,有些事情是lambda函数不能做的——比如定义新变量。它们非常适合创建小型的一次性功能,例如这个。

一旦你理解了这一点,那么你所需要知道的就是key接受一个函数,在传递给的序列中的每个值上调用它sorted,并根据它们的对应key值在它们自己排序时所采用的顺序对值进行排序。

于 2012-10-09T02:11:32.427 回答
3

lambda是内联定义函数的一种方式,冒号前的部分:是函数的参数;在这种情况下,它被称为student. 在本例中,该函数只是返回传递给它的列表或元组的第三部分,即年龄。

于 2012-10-09T02:10:27.747 回答