Я пытаюсь разобраться в лямбдах Python. Это lambda один из тех "интересных" языковых элементов, о которых в реальной жизни следует забыть?
Я уверен, что есть несколько крайних случаев, когда это может потребоваться, но, учитывая его неясность, возможность его переопределения в будущих выпусках (мое предположение основано на различных его определениях) и сниженную ясность кодирования - следует ли этого избегать?
Это напоминает мне переполнение (buffer overflow) типов C - указание на верхнюю переменную и перегрузку для установки других значений полей. Это похоже на демонстрацию технических возможностей, но кошмар программиста по техническому обслуживанию.
Эти вещи на самом деле весьма полезны. Python поддерживает стиль программирования, называемый функциональным программированием, где вы можете передавать функции другим функциям для выполнения определенных действий. Пример:
Конечно, в данном конкретном случае вы могли бы сделать то же самое, что и для понимания списка:
mult3 = [x for x in [1, 2, 3, 4, 5, 6, 7, 8, 9] if x % 3 == 0]
(или даже как range(3,10,3)), но есть много других, более сложных вариантов использования, где вы не можете использовать представление списка, и лямбда-функция может быть кратчайшим способом записать что-либо.
Возвращает функцию из другой функции
>>> deftransform(n): ... returnlambda x: x + n ... >>> f = transform(3) >>> f(4) 7
Это часто используется для создания оболочек функций, таких как декораторы Python.
Объединение элементов повторяющейся последовательности с reduce()
Я регулярно использую лямбда-функции. Мне потребовалось некоторое время, чтобы привыкнуть к ним, но в конце концов я пришел к пониманию, что они являются очень ценной частью языка.
Ответ 2
lambda это просто причудливый способ сказать function. Кроме названия, в нем нет ничего неясного, пугающего или загадочного. Когда вы читаете следующую строку, мысленно замените lambda на function:
>>> f = lambda x: x + 1 >>> f(3) 4
Он просто определяет функцию x. Некоторые другие языки, например R , говорят это явно:
> f = function(x) { x + 1 } > f(3) 4
Понимаете? Это одна из самых естественных вещей в программировании.
Ответ 3
Двухстрочное резюме:
Замыкания: очень полезны. Изучайте их, используйте, любите.
Ключевое слово Python lambda: ненужный, иногда полезный. Если вы обнаружите, что делаете с ним что-то отдаленно сложное, уберите это и определите реальную функцию.
Ответ 4
Лямбда является частью очень важного механизма абстракции, который имеет дело с функциями более высокого порядка. Чтобы получить правильное представление о его ценности, пожалуйста, посмотрите высококачественные уроки от Абельсона и Сассмана и прочитайте книгу SICP
Эти вопросы актуальны в современном программном бизнесе и становятся все более популярными.