Использование sorted() в Python

Возможный дубликат:
Синтаксис за отсортированным (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)]

Я не понимаю, что здесь лямбда и студент? Могут ли они быть заменены другими именами? И что делает : в student:student[2]? Это немного неоднозначно, так как я никогда раньше не сталкивался с этим.

Ответ 1

Семантически это:

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, если они были отсортированы сами.

Ответ 2

lambda - способ определения функции inline, а часть перед двоеточием : является параметром функции; в этом случае он называется student. В этом примере функция просто возвращает третью часть перечня или кортежа, переданных ей, что является возрастом.