Python: lambda-функции

Автор: | 03/29/2015
 

PythonКроме определения функции def — в Python имеется возможность использования анонимных (lambda) функций.

В отличии от deflambda-выражение возвращает саму функцию, а не связывает её с определённым именем, как это делает 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'