30 дней питона (серия 30 частей)
Как объектно -ориентированное программирование, так и функциональные парадигмы программирования работают по одному и тому же принципу – Разделение проблем . В то время как объектно-ориентированное программирование делает это, объединяя свойства и их действия в класс
, Функциональное программирование сохраняет свойства, а их действия отделяются и используют функции для выполнения действий на объектах.
Сегодня я исследовал концепции функционального программирования, применяемые к Python, и посмотрел, как мы можем реализовать методы функционального программирования для организации кода Python.
Во вселенной разработчиков часто проводятся дебаты, между каким стилем парадигмы программирования лучше. В то время как многие имеют сильное мнение о написании чистого объектно -ориентированного кода или чистого функционального кода. Более прагматичный подход заключается в том, чтобы понять преимущества обеих парадигм наряду с их предостережениями и принять лучшие из обоих миров, когда это необходимо.
Вот некоторые из важных понятий функционального программирования и их реализации в Python.
Чистые функции
Чистые функции-это сердце и душа функционального программирования, как классы, а объекты имеют объектно-ориентированное программирование.
Чистая функция – это функция, которая следует за этими двумя правилами:
- Если предоставлен один и тот же вход, он всегда вернет один и тот же вывод.
- Это не приводит к каким-либо побочным эффектам.
Побочные эффекты обычно означают изменение данных вне объема функции, такую как печать на консоли, выполнение сетевого запроса, внесение изменения базы данных, доступ к глобальной переменной и т. Д.
def doubler(num): ''' Accepts a number and multiplies it by 2 ''' return num * 2 print(doubler(5))
def emoji_appender(list, emoji): ''' Accepts a list and a emoji and appends to every item of list ''' new_list = [] for item in list: new_list.append(str(item) + emoji) return new_list print(emoji_appender([1,2,3], '😀')) # ['1😀', '2😀', '3😀'] print(emoji_appender(['alpha','beta','gamma'], '😀')) # ['alpha😀', 'beta😀', 'gamma😀']
Каковы преимущества чистых функций?
Чистая функция в идеале должна выполнять только одно конкретное действие. Поскольку чистые функции всегда возвращают один и тот же выход, при условии того же входа, их очень легко проверить, поскольку они предсказуемы. Эта функция предсказуемости всегда позволяет выполнять несколько чистых функций параллельно, поскольку у них нет в побочных эффектах. Это облегчает чтение и понимание кода.
Некоторые важные встроенные функции
Python поставляется с некоторым встроенным набором функций, который позволяет записать код в функциональном стиле или более декларативным образом. Эти функции являются чистыми, не изменяют входные данные либо создают какие-либо побочные эффекты.
- карта()
карта
Функция принимает функцию как первый аргумент, который выполняет какое -то действие и итерабируемое как второй аргумент. Он в основном зацикливается на каждом элементе итерабильной и применяет пройденную функцию.
numbers = [1,2,3,4,5] def multiply_by5(num): return num * 5 result = map(multiply_by5, numbers) print(result) #
карта
Функция возвращает ссылку на местоположение памяти карта
объект. Чтобы получить результирующие данные, их необходимо передавать в качестве аргумента функции списка. Важная вещь, чтобы отметить о карта
Функция – это вход, а вывод функции имеет одинаковую длину. карта
не изменяет входной итерационный.
- фильтр()
фильтр
В Как имя предлагает фильтры входные итерабируемые данные на основе переданной функции
color_to_remove = 'red' colors = ['blue', 'green', 'black', 'red'] def remove_color(color): return color != color_to_remove result = filter(remove_color, colors) print(list(result)) # ['blue', 'green', 'black'] print(colors) # ['blue', 'green', 'black', 'red'] (Unmodified)
Так же, как карта
, фильтр
Функция возвращает ссылку на адрес в памяти, где хранится объект фильтра, и для получения фактического результата, который он должен быть передан в функцию списка. Длина выхода может быть равной или меньше, чем у входа в зависимости от условия. фильтр
также не меняет и не мутирует входные данные
- Zip ()
Zip
Встроенная функция принимает несколько иеры и групп или застегивает их в качестве кортежей. Этот вид функции может быть очень полезна в сценариях, когда различные пользовательские данные хранятся в разных столбцах в базе данных, и они должны объединяться вместе на основе их отношений.
emails = ['alan@gmail.com', 'ross@gmail.com'] usernames = ['alan', 'ross'] users = list(zip(emails,usernames)) print(users) # [('alan@gmail.com', 'alan'), ('ross@gmail.com', 'ross')] print(emails) # ['alan@gmail.com', 'ross@gmail.com'] (Unmodified) print(usernames) # ['alan', 'ross']
- уменьшать()
уменьшить
немного отличается от других функций, упомянутых выше. уменьшить
не является частью встроенных функций Python. Это часть пакета или пояс для инструментов, который загружается вместе с интерпретатором Python и пакетами. Так что его нужно импортировать из Functools
модуль. Позже изучу больше о модулях.
уменьшить
немного сложно понять. Тем не менее, заимствование у вселенной JavaScript, где массив
Метод уменьшить
Также делает то же самое. Он отслеживает результирующее значение в аккумуляторе.
уменьшить
принимает функцию и итерабируемую в соответствии с необходимыми параметрами и дополнительный инициализатор, который по умолчанию устанавливается 0.
уменьшить
можно рассматривать как способ уменьшить или объединить итерабируемые значения в одно значение.
Отличная статья, чтобы понять функцию уменьшения.
from functools import reduce numbers = [1,2,3,4] def accumulator(acc, curr): return acc + curr sum = reduce(accumulator, numbers, 0) print(sum) # 10
Это все на сегодня. Основные концепции были изучены в основном, я считаю, что концепции функционального программирования повторно появятся в дальнейших расширенных разделах Python. Я хотел бы завтра пройти несколько других оставшихся терминологий функциональных программ и поделиться тем же ясным образом. Я все больше и больше взволнован, поскольку я открываю новые концепции и исследую новые территории в Python. Надеюсь, вы одинаково взволнованы и следовать.
Удачного!
30 дней питона (серия 30 частей)
Оригинал: “https://dev.to/arindamdawn/30-days-of-python-day-11-functional-programming-i-4d9o”