Изучая Python, наткнулся на lambda-функции. Но нигде я пока не нашел примера, где они действительно нужны - только элементарные примеры вида print(lambda x, y: x**2 + y**2), где вполне можно убрать функциональную обертку. Для чего они действительно нужны и полезны?
Ответ Они не могут быть 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 partial def sort_func(key, dict): return 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): return lambda y: x + y add_to_ten = addition(10) print(add_to_ten(8)) print(add_to_ten(6)) По идее, лямбда функции абсолютно то же самое, что и обычные функции, но без имени: def func(x): func = lambda x: x + 1 return 100 import dis print(dis.dis(func)) показывает, что действительно создается новая функция, без обмана.