Изучаем Python. №10. Функциональное программирование. Лямбда функции.


Итак, продолжаем изучать функции и функциональное программирование. Сгодня поговорим о таком явлении, как лямбда функции.

Лямбда функции в Python.

Обычная функция:
 def f(x):
 return x**2
 print f(2)
 >>>4
Лямбда функция:
 g = lambda x: x**2
 print g(2)
 >>>4

Lambda функция не требует инструкции return:

>>> f = lambda x,y: x+y
>>> f(1,5)
6
>>> f('d','v')
'dv'

Вызов ламбда функции в питон на месте определения:

>>> (lambda x,y:x-y)(10,5)
5
>>> (lambda x,y:x+y)('s','l')
'sl'

Неограниченное количество параметров в лямбда функции:

>>> fun = lambda *args: args
>>> fun(5,4,10,7)
(5, 4, 10, 7)

Лямбда функция — это неименованная функция. Тело функции — 1 стейтмент и поэтому не стоит пытаться запихнуть туда какую-то логику.

Замыкание — это функция python, которая ссылается на свободные переменные в лексическом контексте.

def fun(x):
    def zam(z):
        return x+z #захват 'x' из внешнего контекста
    return zam

zam = fun(10)
print zam(5)
>>>15

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

filter() — (функция, последовательность) — возвращает последовательность, состоящую из тех элементов последовательности, для которых функция является истинной.

Пример, находим в списке значения меньшие 10:

>>> spisok = [1,4,11,2,24,-3,5,15]
>>> print filter(lambda x: x<5, spisok)
[1, 4, 2, -3]

map() — (функция, последовательность) — совершает вызов функция (элемент) с каждым элементом последовательности и возвращает список из возвращавшихся функцией значений.

Пример, перемножим между собой два списка:

spisok1 = [2,6,7,0]
listik1 = [2,5,3,9]
print map (lambda x,y: x*y, spisok1, listik1)
>>> [4, 30, 21, 0

reduce() — (функция, последовательность) — возвращает единственное значение собранное из результатов вызовов двухаргументной функции с первыми двумя элементами последовательности; затем с полученным результатом и последующим элементом.

posled = [2,3,4,5,6,7]
print reduce(lambda res,x: res*x, posled)
>>>5040
___________________
Последовательность вычислений:
(((((1*2)*3)*4)*5)*6)*7

Модуль functools — модкль функций высшего порядка.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.

×