Кроме определения функции 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'