lambda student: student[2]
понятнее:
lambda x: x[2]
Лямбда-выражение возвращает функцию. Аргументы для этой функции перед «:» и разделены запятыми.
lambda x,y: x + y
Функция не имеет имени. Но вы можете представить, как будто лямбда создает абстрактную функцию. Лямбда-выражение возвращает функцию.
(Лямбда - это своего рода сущность функции).
Вы можете дать лямбда-выражениям также имя:
f = lambda x: x[2]
И теперь вы можете использовать имя для вызова функции.
f(["a", "b", "c"]) ## returns "c" because the list element "c" has index 2
list(map(f, student_tuples))
## [15, 12, 10]
или с лямбда-выражением:
list(map(lambda x: x[2], student_tuples))
## [15, 12, 10]
на самом деле то, что происходит внутри сортировки:
лямбда-функция применяется к каждому элементу списка (map
).
Внешний list()
вокруг map()
необходим для выполнения map
, потому что map
лениво оценивается (обещание выполнить его, но еще не выполнено).
Ленивые вычисления - это на самом деле вложенность лямбд ... ну, лямбда - это ядро функционального программирования. Языки программирования, такие как Lisp, позволяют понять, что на самом деле является лямбда-выражением. (Вы можете также Google для лямбда-исчисления).
В R функциональный язык, в таком случае определяется порядок итерируемых индексов объектов, а затем применяется к объекту - для упорядочивания / сортировки - для получения окончательной отсортированной версии (функция sort
)
Полагаю, что подобное происходит внутри функции Python sorted
.