Шаг 122.
Python: сборник рецептов.
Функции. Определение анонимных функций или встроенных функций (inline)

    На этом шаге мы рассмотрим пример использования lambda.

Задача

    Вам нужно предоставить короткую функцию обратного вызова для использования в операции типа sort(), но вы не хотите определять отдельную однострочную функцию с помощью инструкции def. Вместо этого вам бы пригодился способ определить функцию "в строке".

Решение

    Простые функции, которые просто вычисляют результат выражения, могут быть заменены инструкцией lambda. Например:

>>> add = lambda x, y: x + y 
>>> add(2, 3)
5
>>> add('hello', 'world')
'helloworld'
>>>

    Использование lambda абсолютно равноценно такому примеру:

>>> def add(x, y):
	return x + y

>>> add(2, 3)
5
>>> 

    Обычно lambda используется в контексте какой-то другой операции, такой как сортировка или свертка (reduction) данных:

>>> names = ['David Beazley', 'Brian Jones', 'Raymond Hettinger', 'Ned Batchelder']
>>> sorted(names, key=lambda name: name.split()[-1].lower())
['Ned Batchelder', 'David Beazley', 'Raymond Hettinger', 'Brian Jones']
>>> 


Обсуждение

    Хотя lambda позволяет определить простую функцию, ее возможности сильно ограничены. В частности, может быть определено только одно выражение, результат которого станет возвращаемым значением. Это значит, что никакие другие возможности языка, в т. ч. множественные инструкции, условия, итерации и обработка исключений, использоваться не могут.

    Вы можете замечательно писать код на Python без использования lambda. Однако вы наверняка натолкнетесь на них в написанной кем-то программе, в которой используется множество маленьких функций для вычисления результатов выражений, или же в программе, которая требует от пользователей предоставлять функции обратного вызова (callback functions).

    На следующем шаге мы рассмотрим захват переменных в анонимных функциях.




Предыдущий шаг Содержание Следующий шаг