Введение в Python - [10]

Шрифт
Интервал

, map, filter, reduce, zip.

Lambda выражение в Python:

lambda оператор или lambda функция в Python это способ создать анонимную функцию, то есть функцию без имени. Такие функции можно назвать одноразовыми, они используются только при создании. Как правило, lambda функции используются в комбинации с функциями filter, map, reduce.

Синтаксис lambda выражения в Python


>1 | lambda arguments: expression


В качестве arguments передается список аргументов, разделенных запятой, после чего над переданными аргументами выполняется expression. Если присвоить lambda-функцию переменной, то получим поведение как в обычной функции (делаем мы это исключительно в целях демонстрации)


>1 | >>> multiply = lambda x,y: x * y

>2 | >>> multiply(21, 2)

>3 | 42


Но, конечно же, все преимущества lambda-выражений мы получаем, используя lambda в связке с другими функциями

Функция map() в Python:

В Python функция map принимает два аргумента: функцию и аргумент составного типа данных, например, список. map применяет к каждому элементу списка переданную функцию. Например, вы прочитали из файла список чисел, изначально все эти числа имеют строковый тип данных, чтобы работать с ними - нужно превратить их в целое число:


>1 | old_list = ['1', '2', '3', '4', '5', '6', '7']

>2 |

>3 | new_list = []

>4 | for item in old_list:

>5 | new_list.append(int(item))

>6 |

>7 | print (new_list)

>8 |

>9 | [1, 2, 3, 4, 5, 6, 7]


Тот же эффект мы можем получить, применив функцию map:


>1 | old_list = ['1', '2', '3', '4', '5', '6', '7']

>2 | new_list = list(map(int, old_list))

>3 | print (new_list)

>4 |

>5 | [1, 2, 3, 4, 5, 6, 7]


Как видите такой способ занимает меньше строк, более читабелен и выполняется быстрее. map также работает и с функциями созданными пользователем:


>1 | def miles_to_kilometers(num_miles):

>2 | """ Converts miles to the kilometers """

>3 | return num_miles * 1.6

>4 |

>5 | mile_distances = [1.0, 6.5, 17.4, 2.4, 9]

>6 | kilometer_distances = list(map(miles_to_kilometers, mile_distances))

>7 | print (kilometer_distances)

> [1.6, 10.4, 27.84, 3.84, 14.4]


А теперь то же самое, только используя lambda выражение:


>1 | mile_distances = [1.0, 6.5, 17.4, 2.4, 9]

>2 | kilometer_distances = list(map(lambda x: x * 1.6, mile_distances))

>3 |

>4 | print (kilometer_distances)

> [1.6, 10.4, 27.84, 3.84, 14.4]


Функция map может быть так же применена для нескольких списков, в таком случае функция-аргумент должна принимать количество аргументов, соответствующее количеству списков:


>1 | l1 = [1,2,3]

>2 | l2 = [4,5,6]

>3 |

>4 | new_list = list(map(lambda x,y: x + y, l1, l2))

>5 | print (new_list)

> [5, 7, 9]


Если же количество элементов в списках совпадать не будет, то выполнение закончится на минимальном списке:


>1 | l1 = [1,2,3]

>2 | l2 = [4,5]

>3 |

>4 | new_list = list(map(lambda x,y: + y, l1, l2))

>5 |

>6 | print (new_list)

> [5,7]


Функция filter() в Python:


Функция filter предлагает элегантный вариант фильтрации элементов последовательности. Принимает в качестве аргументов функцию и последовательность, которую необходимо отфильтровать:


>1 | mixed = ['мак', 'просо', 'мак', 'мак', 'просо', 'мак', 'просо', 'просо', 'просо', 'мак']

>2 | zolushka = list(filter(lambda x: x == 'мак', mixed))

>3 | print (zolushka)

> ['мак', 'мак', 'мак', 'мак', 'мак']


Обратите внимание, что функция, передаваемая в filter должна возвращать значение True / False, чтобы элементы корректно отфильтровались.

Функция reduce() в Python:

Функция reduce принимает 2 аргумента: функцию и последовательность. reduce() последовательно применяет функцию-аргумент к элементам списка, возвращает единичное значение. Обратите внимание в Python 2.x функция reduce доступна как встроенная, в то время, как в Python 3 она была перемещена в модуль functools.

Вычисление суммы всех элементов списка при помощи reduce:


>1 | from functools import reduce

>2 | items = [1,2,3,4,5]

>3 | sum_all = reduce(lambda x,y: x + y, items)

>4 |

>5 | print (sum_all)

> 15


Вычисление наибольшего элемента в списке при помощи reduce:


>1 | from functolls import reduce

>2 | items = [1, 24, 17, 14, 9, 32, 2]

>3 | all_max = reduce(lambda a,b: a if (a > b) else b, items)

>4 |

>5 | print (all_max)

> 32


Функция zip() в Python:

Функция zip объединяет в кортежи элементы из последовательностей переданных в качестве аргументов.


>1 | a = [1,2,3]

>2 | b = "xyz"

>3 | c = (None, True)

>4 |

>5 | res = list(zip(a, b, c))

>6 | print (res)

> [(1, 'x', None), (2, 'y', True)]


Обратите внимание, что zip прекращает выполнение, как только достигнут конец самого короткого списка.

Объектно-ориентированное программирование в Python


Published: 04 November 2014

* ООП


Объектно-ориентированным программированием называется такой подход к программированию, в котором используются понятия класса и объекта. Говоря проще, когда перед нами стоит задача запрограммировать какой-либо объект, то намного легче сделать это описав этот объект, чем написав ряд функций.

Терминология объектно-ориентированного программирования:

* Класс (Class): Определенный программистом прототип программируемого объекта с набором атрибутов (переменных и методов), которые описывают данный объект. Доступ к аттрибутам и методам осуществляется через точку


Рекомендуем почитать
Изучаем Java EE 7

Java Enterprise Edition (Java EE) остается одной из ведущих технологий и платформ на основе Java. Данная книга представляет собой логичное пошаговое руководство, в котором подробно описаны многие спецификации и эталонные реализации Java EE 7. Работа с ними продемонстрирована на практических примерах. В этом фундаментальном издании также используется новейшая версия инструмента GlassFish, предназначенного для развертывания и администрирования примеров кода. Книга написана ведущим специалистом по обработке запросов на спецификацию Java EE, членом наблюдательного совета организации Java Community Process (JCP)


Программное обеспечение и его разработка

Автор книги — американский специалист по программированию, один из руководителей фирмы IBM, в своей книге делает попытку изложить общие проблемы создания программного обеспечения, его сопровождения и использования. Особенно подробно рассматриваются все фазы разработки программ разных типов. Изложение ясное, удачно иллюстрировано примерами.Для программистов разной квалификации и пользователей ЭВМ.fb2: ВНИМАНИЕ. В тексте присутствуют таблицы. Рекомендуется читать файл с помощью программы, поддерживающей их отображение.


Вариации на тему STL. Адаптер обобщенного указателя на функцию-член класса

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.


Примеры использования Паттерн Singleton (Одиночка)

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.


Создаем порт для FreeBSD своими руками. Часть II

Система сборки программ, используемая во FreeBSD, имеет значительно большие возможности, чем те, которые мы задействовали. Какие это возможности и как их использовать в своих портах?


FreeBSD - полезные советы

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.