2013-12-02 3 views
1

Я понимаю, что они делают и как их использовать, но я все еще несколько смущен, почему они включены в Python. Какая польза в их использовании, над стандартным стилем определения функции?Python - для чего нужны лямбды?

Единственное реальное отличие, о котором я могу думать, это то, что вы можете создать их внутри выражения. Например, если MyList был список Интс и вы хотите добавить один к каждому элементу, можно использовать

list(map(lambda x: x+1, myList)) 

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

Однако я серьезно сомневаюсь, что это относительно небольшое удобство оправдывало бы их включение в язык, поэтому я предполагаю, что я чего-то не хватает. Или, возможно, я недооцениваю полезность возможности создавать функции внутри таких строк.

Итак, это в основном мой вопрос - на что должны рассчитываться лямбды? Почему они включены?

+0

Это действительно так. – user2357112

+0

Стоит прочитать: https://en.wikipedia.org/wiki/Anonymous_function. –

+1

Лямбда - это анонимная функция, означающая, что вам это нужно только временно. Это немного функциональное программирование на Python. – squiguy

ответ

9

На это нет глубокого ответа. Давным-давно кто-то внес свой код для реализации lambda, и в самый слабый момент ;-) Гвидо (ван Россум) применил патч. Вот и все.

Это Подходит иногда, хотя это в основном чрезмерно используется. Например, в различных системах GUI вы часто хотите передать простую функцию обратного вызова, которая будет вызвана, когда щелкнут какой-либо элемент в графическом интерфейсе. lambda s действительно хороши для этого.

FYI, вот запись Guido, сделанная в то время, для выпуска Python 1.0.0 (26 января 1994 года). Вы можете найти это в файле Misc/HISTORY дистрибутива Python:

Новое ключевое слово 'лямбда'. Выражение параметров лямбда-формы

: выражение

дает анонимную функцию. Это действительно только синтаксический сахар; вы можете точно также определить локальную функцию с помощью

четкости some_temporary_name (параметры): возвращает выражение

Лямбда-выражения особенно полезны в сочетании с картой(), фильтр() и уменьшения(), как описано ниже , Спасибо Amrit Prem за , отправив этот код (а также карту(), filter(), reduce() и xrange())!

Так виню Амрит Prem - LOL ;-)

EDIT И click here читать блог Guido по этому вопросу. Любопытно, что он не помнил, чтобы посмотреть в Misc/HISTORY, забыл имя автора патча и что его воспоминания отключены на несколько лет. Хорошо, что я все еще рядом, чтобы покрыть его ;-)

+2

[Это Тим!] (Http://en.wikipedia.org/wiki/Timsort) Это всегда странно тебя видеть. – user2357112

+0

@ user2357112 Спасибо, что указали это, не шутка; учитывая, что он внес свой вклад в Python. – squiguy

+0

О! Ой! Это получило downvoted - это весело, - –

Смежные вопросы