Вопрос-Ответ

How are lambdas useful? [closed]

Чем полезны лямбды?

Я пытаюсь разобраться в лямбдах Python. Это lambda один из тех "интересных" языковых элементов, о которых в реальной жизни следует забыть?

Я уверен, что есть несколько крайних случаев, когда это может потребоваться, но, учитывая его неясность, возможность его переопределения в будущих выпусках (мое предположение основано на различных его определениях) и сниженную ясность кодирования - следует ли этого избегать?

Это напоминает мне переполнение (buffer overflow) типов C - указание на верхнюю переменную и перегрузку для установки других значений полей. Это похоже на демонстрацию технических возможностей, но кошмар программиста по техническому обслуживанию.

Переведено автоматически
Ответ 1

Вы говорите о лямбда-выражениях? Нравится

lambda x: x**2 + 2*x - 5

Эти вещи на самом деле весьма полезны. Python поддерживает стиль программирования, называемый функциональным программированием, где вы можете передавать функции другим функциям для выполнения определенных действий. Пример:

mult3 = filter(lambda x: x % 3 == 0, [1, 2, 3, 4, 5, 6, 7, 8, 9])

устанавливает mult3 в [3, 6, 9] те элементы исходного списка, которые кратны 3. Это короче (и, можно утверждать, понятнее), чем

def filterfunc(x):
return x % 3 == 0
mult3 = filter(filterfunc, [1, 2, 3, 4, 5, 6, 7, 8, 9])

Конечно, в данном конкретном случае вы могли бы сделать то же самое, что и для понимания списка:

mult3 = [x for x in [1, 2, 3, 4, 5, 6, 7, 8, 9] if x % 3 == 0]

(или даже как range(3,10,3)), но есть много других, более сложных вариантов использования, где вы не можете использовать представление списка, и лямбда-функция может быть кратчайшим способом записать что-либо.


  • Возвращает функцию из другой функции


      >>> def transform(n):
    ... return lambda x: x + n
    ...
    >>> f = transform(3)
    >>> f(4)
    7

    Это часто используется для создания оболочек функций, таких как декораторы Python.



  • Объединение элементов повторяющейся последовательности с reduce()


      >>> reduce(lambda a, b: '{}, {}'.format(a, b), [1, 2, 3, 4, 5, 6, 7, 8, 9])
    '1, 2, 3, 4, 5, 6, 7, 8, 9'


  • Сортировка по альтернативному ключу


      >>> sorted([1, 2, 3, 4, 5, 6, 7, 8, 9], key=lambda x: abs(5-x))
    [5, 4, 6, 3, 7, 2, 8, 1, 9]


Я регулярно использую лямбда-функции. Мне потребовалось некоторое время, чтобы привыкнуть к ним, но в конце концов я пришел к пониманию, что они являются очень ценной частью языка.

Ответ 2

lambda это просто причудливый способ сказать function. Кроме названия, в нем нет ничего неясного, пугающего или загадочного. Когда вы читаете следующую строку, мысленно замените lambda на function:

>>> f = lambda x: x + 1
>>> f(3)
4

Он просто определяет функцию x. Некоторые другие языки, например R , говорят это явно:

> f = function(x) { x + 1 }
> f(3)
4

Понимаете? Это одна из самых естественных вещей в программировании.

Ответ 3

Двухстрочное резюме:


  1. Замыкания: очень полезны. Изучайте их, используйте, любите.

  2. Ключевое слово Python lambda: ненужный, иногда полезный. Если вы обнаружите, что делаете с ним что-то отдаленно сложное, уберите это и определите реальную функцию.

Ответ 4

Лямбда является частью очень важного механизма абстракции, который имеет дело с функциями более высокого порядка. Чтобы получить правильное представление о его ценности, пожалуйста, посмотрите высококачественные уроки от Абельсона и Сассмана и прочитайте книгу SICP

Эти вопросы актуальны в современном программном бизнесе и становятся все более популярными.

python function