аватар question@mail.ru · 01.01.1970 03:00

Зачем нужны Lambda-функции?

Изучая Python, наткнулся на lambda-функции. Но нигде я пока не нашел примера, где они действительно нужны - только элементарные примеры вида print(lambda x, y: x**2 + y**2), где вполне можно убрать функциональную обертку. Для чего они действительно нужны и полезны?

аватар 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))

показывает, что действительно создается новая функция, без обмана.

Последние

Похожие