Кроме определения функции def — в Python имеется возможность использования анонимных (lambda) функций.
В отличии от def — lambda-выражение возвращает саму функцию, а не связывает её с определённым именем, как это делает def.
Синтаксис lambda-функций выглядит так:
lambda argument1, argument2,... argumentN : выражение, использующее аргументы
Рассмотрим самый простой пример, и сравним его с обычной функцией Python:
>>> def func(x, y, z): ... return x + y + z ... >>> func(1, 2, 3) 6
И то же самое — но с помощью lambda:
>>> name = lambda x, y, z: x + y + z >>> name(1, 2, 3) 6
Как и в обычных функциях — тут можно задавать значения по умолчанию:
>>> name = lambda x=1, y=1, z=1: x + y + z >>> name() 3 >>> name(0) 2 >>> name(8) 10
Допустимо использование логических операторов if/else:
>>> i = lambda x, y: x if x < y else y >>> i(1, 2) 1 >>> i(2, 1) 1
Допустимо использование «циклов» (итераций), но не с помощью for/while — а с использованием функции map() или генераторов списков.
Например — с помощью map():
>>> a = [1, 2, 3, 4, 5] >>> b = map(lambda c : c * 5, a) >>> b [5, 10, 15, 20, 25]
Или с помощью генератора списка:
>>> a = [1, 2, 3, 4, 5] >>> b = lambda x: [d * 5 for d in x] >>> b(a) [5, 10, 15, 20, 25]
Конечно, кроме математических операций — в lambda можно использовать другие функции:
>>> def func(a):
... return a
...
>>> l = lambda x: func(x)
>>> l('word')
word
>>> l = lambda x: ' '.join(func(x))
>>> l('abcd')
'a b c d'
>>> l = lambda x: ' '.join(func(x) * 3)
>>> l('abcd')
'a b c d a b c d a b c d'