Функция лямбда (точнее, лямбда выражение) просто функция вам может определять на месте, прямо там, где вам это нужно. Например,
f = lambda x: x * 2
является точно то же самое, как
def f(x):
return x * 2
И когда я говорю точно, я имею в виду - они разборку к тому же байткод. Единственное различие между ними состоит в том, что имя, указанное во втором примере, имеет имя.
Лямбда-выражения становятся полезными, поскольку создание одного не утверждение, а это означает, что, как и другие уже ответили, вы можете сделать
print iterator(lambda x: x/4 + 12, 100, 5)
, чтобы получить именно то, что вы хотите.
Главное отличие между лямбда-выражениями и регулярными функциями состоит в том, что лямбды более ограничены. Lambdas может содержать только выражения, а не инструкции. Выражение - это все, что вы можете поместить в правую часть задания =
.(если вы хотите получить больше педантичности, Python определяет выражение как http://docs.python.org/2/reference/expressions.html)
Это означает, что выражение лямбда не может назначаться переменной (фактически, она не может иметь локальные переменные вообще, кроме ее параметры). Он не может печатать (если он не вызывает другую функцию). Он не может иметь цикл for, цикл while, тест if (кроме трехмерного оператора x if cond else y
) или блок try/except.
Если вам нужно сделать что-либо из этого, просто определите регулярную функцию. На самом деле, в любое время, когда вы думаете, что хотите использовать лямбду, подумайте дважды. Разве код не был бы более читаемым, если бы вы использовали регулярную функцию? Разве это не лямбда-выражение, которое вы хотели бы использовать в другом месте в своем коде?
В конце концов, всегда делайте то, что приводит к наиболее читаемому и поддерживаемому коду. Нет никакой разницы между лямбдами и нормальными функциями в отношении производительности.
Благодарим вас за полезное объяснение. –
Обратите внимание, что печать не является проблемой в Python 3, так как 'print' заменяется на функцию. – aIKid