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