Изучая Python, наткнулся на lambda-функции. Но нигде я пока не нашел примера, где они действительно нужны - только элементарные примеры вида print(lambda x, y: x**2 + y**2), где вполне можно убрать функциональную обертку. Для чего они действительно нужны и полезны?
question@mail.ru
·
01.01.1970 03:00
Зачем нужны Lambda-функции?
answer@mail.ru
·
01.01.1970 03:00
Они не могут быть 100% нужны, то есть без операций сложений написать программу нельзя, без лямбда-функций - можно, но с ними короче и удобней. Например, нужно напечатать словарь в порядке убывания суммы каждого значения:
bigrams = {""AB"": [10, 11, 12], ""BC"": [5, -5, 8], ""CD"": [105, 1, 0], ""DE"": [6, 6], ""EF"": [15, 20, 15], ""FG"": [22, 11, 32], ""GH"": [20, 20, 20]}sorter = sorted(bigrams, key=lambda key: sum(bigrams[key]), reverse=True)for key in sorter: print(key, bigrams[key])Иначе нужно написать функцию:
from functools import partialdef sort_func(key, dict): retu sum(dict[key])bigrams = {""AB"": [10, 11, 12], ""BC"": [5, -5, 8], ""CD"": [105, 1, 0], ""DE"": [6, 6], ""EF"": [15, 20, 15], ""FG"": [22, 11, 32], ""GH"": [20, 20, 20]}partial_sort = partial(sort_func, dict=bigrams)sorter = sorted(bigrams.keys(), key=partial_sort, reverse=True)for key in sorter: print(key, bigrams[key])Результат одинаков, но с лямбдой короче, не нужно искать глазами sort_func - сразу ясно, как именно сортируется коллекция. В стандартной библиотеке полно функций, которые принимают другие функции: map, reduce, filter, sorted, any, all
Можно написать замыкание:
def addition(x): retu lambda y: x + yadd_to_ten = addition(10)print(add_to_ten(8))print(add_to_ten(6))По идее, лямбда функции абсолютно то же самое, что и обычные функции, но без имени:
def func(x): func = lambda x: x + 1 retu 100import disprint(dis.dis(func))показывает, что действительно создается новая функция, без обмана.