HTML Diff
0 added 0 removed
Original 2026-01-01
Modified 2026-03-10
1 <p>Чтобы правильно пользоваться функциями или методами в Python, надо сначала понять их внутреннюю реализацию. Следует знать, какие аргументы они принимают и какие значения возвращают. В этой статье будет подробно рассмотрена работа таких полезных и часто используемых функций (functions), как map и filter.</p>
1 <p>Чтобы правильно пользоваться функциями или методами в Python, надо сначала понять их внутреннюю реализацию. Следует знать, какие аргументы они принимают и какие значения возвращают. В этой статье будет подробно рассмотрена работа таких полезных и часто используемых функций (functions), как map и filter.</p>
2 <h2>Функция map</h2>
2 <h2>Функция map</h2>
3 <p>Ф-я map в Python 3 (three), способна принимать 2 аргумента: -<strong>iterable</strong>(итерируемый объект); -<strong>function</strong>(функция).</p>
3 <p>Ф-я map в Python 3 (three), способна принимать 2 аргумента: -<strong>iterable</strong>(итерируемый объект); -<strong>function</strong>(функция).</p>
4 <p>Функция применяется к каждому элементу объекта, а возвращаемым значением является объект map. Этот объект - итератор, который вы сможете конвертировать в список (множество), используя для этого встроенные функции.</p>
4 <p>Функция применяется к каждому элементу объекта, а возвращаемым значением является объект map. Этот объект - итератор, который вы сможете конвертировать в список (множество), используя для этого встроенные функции.</p>
5 <p>Говоря простыми словами, функция map в Питоне даёт возможность преобразовывать элементы итерируемого объекта с учётом и в соответствии с какой-нибудь указанной функцией:</p>
5 <p>Говоря простыми словами, функция map в Питоне даёт возможность преобразовывать элементы итерируемого объекта с учётом и в соответствии с какой-нибудь указанной функцией:</p>
6 <p>Дабы понять её работу, лучше всего привести пример. Давайте представим, что у нас существует некий упорядоченный список.</p>
6 <p>Дабы понять её работу, лучше всего привести пример. Давайте представим, что у нас существует некий упорядоченный список.</p>
7 <p>И у нас стоит задача получить множество (список), состоящее из квадратов этих чисел. Чтобы эту задачу решить, надо создать function по возведению числа в квадрат:</p>
7 <p>И у нас стоит задача получить множество (список), состоящее из квадратов этих чисел. Чтобы эту задачу решить, надо создать function по возведению числа в квадрат:</p>
8 <p>Теперь можно вызвать описываемую нами function map:</p>
8 <p>Теперь можно вызвать описываемую нами function map:</p>
9 <p>Учтите, что мы осуществляем передачу ссылки на функцию, записывая её имя без круглых скобок. По итогу наших действий, переменная b станет ссылаться на итератор map. Теперь для перебора всех значений мы можем использовать известную function next:</p>
9 <p>Учтите, что мы осуществляем передачу ссылки на функцию, записывая её имя без круглых скобок. По итогу наших действий, переменная b станет ссылаться на итератор map. Теперь для перебора всех значений мы можем использовать известную function next:</p>
10 <p>Также можно сформировать новый список, используя функцию list:</p>
10 <p>Также можно сформировать новый список, используя функцию list:</p>
11 <p>Итак, функция map применяет к каждому элементу списка lst функцию sq, возвращая объект-генератор, что необходимо в целях последовательного выбора новых значений, прошедших преобразование. В каком-то смысле речь идёт об эквиваленте следующего выражения-генератора:</p>
11 <p>Итак, функция map применяет к каждому элементу списка lst функцию sq, возвращая объект-генератор, что необходимо в целях последовательного выбора новых значений, прошедших преобразование. В каком-то смысле речь идёт об эквиваленте следующего выражения-генератора:</p>
12 <p>Или же такого списка:</p>
12 <p>Или же такого списка:</p>
13 <p>Следует обратить внимание, что function sq либо какая-нибудь иная функция должна принимать лишь один аргумент во всех случаях. В обратном случае мы получим ошибку. В качестве примера можно привести запись ниже, которая будет ошибочной:</p>
13 <p>Следует обратить внимание, что function sq либо какая-нибудь иная функция должна принимать лишь один аргумент во всех случаях. В обратном случае мы получим ошибку. В качестве примера можно привести запись ниже, которая будет ошибочной:</p>
14 <p>Возвращать же function map может несколько аргументов, как в примере ниже:</p>
14 <p>Возвращать же function map может несколько аргументов, как в примере ниже:</p>
15 <p>В итоге мы получим следующий код:</p>
15 <p>В итоге мы получим следующий код:</p>
16 <p>А результатом его работы станет список кортежей:</p>
16 <p>А результатом его работы станет список кортежей:</p>
17 <p>Вышеописанные преобразования вы можете осуществлять с любыми типами данных, с теми же строками:</p>
17 <p>Вышеописанные преобразования вы можете осуществлять с любыми типами данных, с теми же строками:</p>
18 lst = ["Минск", "Гродно", "Гомель", "Могилев", "Брест"] b = map(len, lst) a = list(b) print(a)<p>В результате работы кода будет сформирован список с длинами указанных строк:</p>
18 lst = ["Минск", "Гродно", "Гомель", "Могилев", "Брест"] b = map(len, lst) a = list(b) print(a)<p>В результате работы кода будет сформирован список с длинами указанных строк:</p>
19 <p>Если же необходимо задействовать встроенные строковые методы, сделать это можно следующим образом:</p>
19 <p>Если же необходимо задействовать встроенные строковые методы, сделать это можно следующим образом:</p>
20 <p>Иногда бывает, что в качестве первого аргумента функции map указывают лямбда-функции (так называемые анонимные функции):</p>
20 <p>Иногда бывает, что в качестве первого аргумента функции map указывают лямбда-функции (так называемые анонимные функции):</p>
21 b = map(lambda x: x[::-1], lst)<p>В результате работы такого кода вы получите на выходе строки, которые будут записаны в обратном порядке (наоборот).</p>
21 b = map(lambda x: x[::-1], lst)<p>В результате работы такого кода вы получите на выходе строки, которые будут записаны в обратном порядке (наоборот).</p>
22 <p>Идём дальше. Так как в Python функция map принимает 2-м аргументом любой итерируемый объект, у разработчика есть возможность результат работы 1-й функции map задействовать во второй функции map.</p>
22 <p>Идём дальше. Так как в Python функция map принимает 2-м аргументом любой итерируемый объект, у разработчика есть возможность результат работы 1-й функции map задействовать во второй функции map.</p>
23 <p>Первая функция:</p>
23 <p>Первая функция:</p>
24 <p>Вторая функция:</p>
24 <p>Вторая функция:</p>
25 <p>Ещё раз код целиком:</p>
25 <p>Ещё раз код целиком:</p>
26 lst = ["Минск", "Гродно", "Гомель", "Могилев", "Брест"] b = map(lambda x: x.replace("а", "А"), lst) c = map(sorted, b) res1 = list(c) print(res1)<p>И результат:</p>
26 lst = ["Минск", "Гродно", "Гомель", "Могилев", "Брест"] b = map(lambda x: x.replace("а", "А"), lst) c = map(sorted, b) res1 = list(c) print(res1)<p>И результат:</p>
27 [['М', 'и', 'к', 'н', 'с'], ['Г', 'д', 'н', 'о', 'о', 'р'], ['Г', 'е', 'л', 'м', 'о', 'ь'], ['М', 'в', 'г', 'е', 'и', 'л', 'о'], ['Б', 'е', 'р', 'с', 'т']]<p>То есть в нашем примере строки коллекции b ["Минск", "Гродно", "Гомель", "Могилев", "Брест"] оказались преобразованы в перечень символов, которые отсортированы по возрастанию.</p>
27 [['М', 'и', 'к', 'н', 'с'], ['Г', 'д', 'н', 'о', 'о', 'р'], ['Г', 'е', 'л', 'м', 'о', 'ь'], ['М', 'в', 'г', 'е', 'и', 'л', 'о'], ['Б', 'е', 'р', 'с', 'т']]<p>То есть в нашем примере строки коллекции b ["Минск", "Гродно", "Гомель", "Могилев", "Брест"] оказались преобразованы в перечень символов, которые отсортированы по возрастанию.</p>
28 <h2>Где ещё используется функция map?</h2>
28 <h2>Где ещё используется функция map?</h2>
29 <p>Также нередко функцию map применяют для ввода ряда чисел с клавиатуры через какой-нибудь разделитель, тот же, пробел. Напишем очередной код:</p>
29 <p>Также нередко функцию map применяют для ввода ряда чисел с клавиатуры через какой-нибудь разделитель, тот же, пробел. Напишем очередной код:</p>
30 <p>Если станем вводить целые числовые значения через пробел, при исполнении функции int появится ошибка, ведь пробел не является цифровым символом. Теперь разобьем данную строку по пробелам:</p>
30 <p>Если станем вводить целые числовые значения через пробел, при исполнении функции int появится ошибка, ведь пробел не является цифровым символом. Теперь разобьем данную строку по пробелам:</p>
31 <p>В итоге получим список из строк, где записаны введенные числовые значения. Однако функцию int следует применять не к списку, а к конкретной строке. Операция ниже тоже закончится ошибкой:</p>
31 <p>В итоге получим список из строк, где записаны введенные числовые значения. Однако функцию int следует применять не к списку, а к конкретной строке. Операция ниже тоже закончится ошибкой:</p>
32 <p>Проблему решит функция map. С её помощью реализовать ввод можно так:</p>
32 <p>Проблему решит функция map. С её помощью реализовать ввод можно так:</p>
33 <p>По итогу будет создан генератор для получения введенных числовых значений. Однако всё это намного удобнее сразу преобразовать к списку:</p>
33 <p>По итогу будет создан генератор для получения введенных числовых значений. Однако всё это намного удобнее сразу преобразовать к списку:</p>
34 <p>В результате, если будем вводить любое количество числовых значений через пробел, будет получаться упорядоченный список, который состоит из чисел. Согласитесь, иногда это бывает весьма удобно.</p>
34 <p>В результате, если будем вводить любое количество числовых значений через пробел, будет получаться упорядоченный список, который состоит из чисел. Согласитесь, иногда это бывает весьма удобно.</p>
35 <h2>Функция filter в Python</h2>
35 <h2>Функция filter в Python</h2>
36 <p>Очередная функция, заслуживающая внимания, называется filter. С её помощью выполняется возврат элементов, для которых переданная ей функция, в свою очередь, возвращает True:</p>
36 <p>Очередная функция, заслуживающая внимания, называется filter. С её помощью выполняется возврат элементов, для которых переданная ей функция, в свою очередь, возвращает True:</p>
37 <p>Давайте предположим, что у нас существует список, из которого мы хотим отобрать нечётные значения:</p>
37 <p>Давайте предположим, что у нас существует список, из которого мы хотим отобрать нечётные значения:</p>
38 <p>Для этого следует определить функцию:</p>
38 <p>Для этого следует определить функцию:</p>
39 <p>Потом вызвать filter:</p>
39 <p>Потом вызвать filter:</p>
40 <p>В итоге получим итератор. Его можно перебрать так:</p>
40 <p>В итоге получим итератор. Его можно перебрать так:</p>
41 <p>Перебор можно реализовать и посредством цикла:</p>
41 <p>Перебор можно реализовать и посредством цикла:</p>
42 <p>Также есть возможность выполнить преобразование итератора в список:</p>
42 <p>Также есть возможность выполнить преобразование итератора в список:</p>
43 <p>Использовать функцию filter можно с любыми типами данных, с теми же строками. Представим, что у нас есть в наличии следующий кортеж:</p>
43 <p>Использовать функцию filter можно с любыми типами данных, с теми же строками. Представим, что у нас есть в наличии следующий кортеж:</p>
44 lst = ("Гродно", "Гомель1", "Минск", "Витебск2", "Брест") b = filter(str.isalpha, lst) for x in b: print(x, end=" ")<p>Давайте вызовем метод строк isalpha, возвращающий True в том случае, когда в строке находятся лишь буквенные символы. В итоге в консоли получим следующий результат:</p>
44 lst = ("Гродно", "Гомель1", "Минск", "Витебск2", "Брест") b = filter(str.isalpha, lst) for x in b: print(x, end=" ")<p>Давайте вызовем метод строк isalpha, возвращающий True в том случае, когда в строке находятся лишь буквенные символы. В итоге в консоли получим следующий результат:</p>
45 <p>На этом всё, если хотите освоить язык программирования Python на более высоком уровне, добро пожаловать на курсы OTUS!</p>
45 <p>На этом всё, если хотите освоить язык программирования Python на более высоком уровне, добро пожаловать на курсы OTUS!</p>
46 <p><em>Источники:</em>• https://proproprogs.ru/python_base/funkcii-map-filter-zip; • https://pythonru.com/osnovy/funkcija-map-v-python.</p>
46 <p><em>Источники:</em>• https://proproprogs.ru/python_base/funkcii-map-filter-zip; • https://pythonru.com/osnovy/funkcija-map-v-python.</p>
47  
47