Доброго времени суток, читатели, зрители моего канала programmer's notes.
Приложение к видео-уроку 26
Функциональное программирование на Python
Функции в качестве параметров
Конечно речь идет об элементах функционального программирования. Функции, которые могут принимать в качестве параметров другие функции и возвращать функции, обычно называют функциями высшего порядка. В Python есть несколько встроенных функций высшего порядка. Лишний раз подчеркнем, что Python не является функциональным языком, это язык императивный. Поэтому то, что мы рассматриваем, является только элементом функционального программирования.
Перейдем к простейшим примерам.
Результат выполнения программы
200
-10
В нашем примере функция act() выполняет роль простейшего калькулятора. В зависимости от того, какую функцию мы отправляем в качестве третьего параметра, выполняется действие над первыми двумя. Другие словами, действие задается передаваемой функцией. Важно отметить, что результат выполнения любой из представленных в программе функций, определяется только ее параметрами. Это один из принципов функционального программирования.
А вот импровизация на тему из предыдущего примера
Функция возвращает функцию, и возвращенная функция используется в основной программе для вычисления указанного действия.
Результат выполнения программы
30
-10
Лямбда-функция
Лямбда-функция, или анонимная функция, или одноразовая функция - это функция, содержимое которой мы формируем непосредственно в строке использования. Главным образом в качестве параметра, хотя и не только. Лямбда-функция всегда одностроковая.
Вот пример
Результат выполнения программы
30
200
Как видим структура лямбда-функции проста: ключевое слово lambda, далее через пробел список параметров, двоеточие и выполняемое действие, результат которого возвращается. Понятно, что такая функция не должна быть слишком сложной, в противном случае это может затруднить чтение программы.
Конечно такую функцию не обязательно использовать в качестве параметра. Можно, например, и так
a = lambda x, y: x + y
print(a(10, 30))
Результат выполнения
40
Но особого смысла в использования в таком виде я не вижу.
Вот еще интересный пример использование анонимной функции в методе sort() в качестве именованного параметра.
Результат выполнения программы
[[1, 1], [1, 2], [2, 6], [2, 11], [8, 8]]
Элементы списка выстроены по возрастанию сумм элементов списков.
Конечно, представленные выше примеры, просты. Если вы задумаете писать программу полностью по функциональной парадигме, то придется в значительной степени менять мышление. Например, избавиться от глобальных переменных и вообще от того, что может повлиять на выполнение функции. Результат выполнения функции должен зависеть только от входных параметров. Впрочем, это уже совсем другая история.
Пока все. Всего наилучшего. Оставляйте свои комментарии, не забывайте про лайки и подписывайтесь на мой канал programmer's notes.