Python модуль itertools. Как избежать вложенных циклов
Модуль itertools — это стандартный модуль языка Python, который предоставляет набор функций для работы с итераторами и генераторами. Этот модуль может помочь в избавлении от вложенных циклов в вашем коде благодаря его функции, таких как:
1. itertools.product — позволяет получить декартово произведение нескольких итерируемых объектов без использования вложенных циклов.
colors = [‘red’, ‘green’, ‘blue’]
for color, size in itertools.product(colors, sizes):
2. itertools.chain — позволяет объединить несколько итераторов в один без копирования элементов.
for item in itertools.chain(list1, list2):
3. itertools.islice — позволяет получить кусок итератора без копирования всех элементов итератора.
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
for item in itertools.islice(numbers, 2, 5):
Эти функции помогают избежать вложенных циклов и сделать ваш код более читаемым и компактным.
`itertools` содержит функции, решающие типичные задачи обработки коллекций, которые можно реализовать с помощью циклов или списковых включений, но это может потребовать дополнительных усилий. Этот модуль позволяет оптимизировать код, сократить количество строк кода и улучшить производительность.
Некоторые функции `itertools`:
— `count(start=0, step=1)` — бесконечный итератор, который возвращает значения вида `start`, `start + step`, `start + 2 * step` и т.д.
— `cycle(iterable)` — бесконечный итератор, который постоянно повторяет элементы итерируемого объекта.
— `repeat(elem, n)` — возвращает итератор, который бесконечно возвращает элемент `elem` или повторяет его `n` раз.
— `chain(*iterables)` — объединяет несколько итерируемых объектов в один длинный итератор.
— `combinations(iterable, r)` — возвращает все возможные комбинации из `r` элементов из итерируемого объекта `iterable`.
— `permutations(iterable, r=None)` — возвращает все возможные перестановки из `r` элементов из итерируемого объекта `iterable`, или все перестановки, если `r` не указано.
— `product(*iterables, repeat=1)` — возвращает декартово произведение нескольких итерируемых объектов.
— `zip_longest(*iterables, fillvalue=None)` — возвращает итератор, который объединяет элементы нескольких итерируемых объектов и заполняет пропущенные значения, если один из объектов закончился.
Модуль `itertools` — очень полезный инструмент для работы с итерируемыми объектами и генераторами в Python, позволяющий эффективно решать множество задач.
Модуль itertools

itertools.count(start=0, step=1) — бесконечная арифметическая прогрессия с первым членом start и шагом step.
itertools.cycle(iterable) — возвращает по одному значению из последовательности, повторенной бесконечное число раз.
itertools.repeat(elem, n=Inf) — повторяет elem n раз.
itertools.accumulate(iterable) — аккумулирует суммы.
itertools.chain(*iterables) - возвращает по одному элементу из первого итератора, потом из второго, до тех пор, пока итераторы не кончатся.
itertools.combinations(iterable, [r]) — комбинации длиной r из iterable без повторяющихся элементов.
itertools.combinations_with_replacement(iterable, r) - комбинации длиной r из iterable с повторяющимися элементами.
itertools.compress(data, selectors) - (d[0] if s[0]), (d[1] if s[1]), .
itertools.dropwhile(func, iterable) - элементы iterable, начиная с первого, для которого func вернула ложь.
itertools.filterfalse(func, iterable) - все элементы, для которых func возвращает ложь.
itertools.groupby(iterable, key=None) — группирует элементы по значению. Значение получается применением функции key к элементу (если аргумент key не указан, то значением является сам элемент).
itertools.islice(iterable[, start], stop[, step]) — итератор, состоящий из среза.
itertools.permutations(iterable, r=None) — перестановки длиной r из iterable.
itertools.product(*iterables, repeat=1) — аналог вложенных циклов.
itertools.starmap(function, iterable) - применяет функцию к каждому элементу последовательности (каждый элемент распаковывается).
itertools.takewhile(func, iterable) - элементы до тех пор, пока func возвращает истину.
itertools.tee(iterable, n=2) - кортеж из n итераторов.
itertools.zip_longest(*iterables, fillvalue=None) — как встроенная функция zip, но берет самый длинный итератор, а более короткие дополняет fillvalue.
Для вставки кода на Python в комментарий заключайте его в теги
- Модуль csv - чтение и запись CSV файлов
- Создаём сайт на Django, используя хорошие практики. Часть 1: создаём проект
- Онлайн-обучение Python: сравнение популярных программ
- Книги о Python
- GUI (графический интерфейс пользователя)
- Курсы Python
- Модули
- Новости мира Python
- NumPy
- Обработка данных
- Основы программирования
- Примеры программ
- Типы данных в Python
- Видео
- Python для Web
- Работа для Python-программистов
- Сделай свой вклад в развитие сайта!
- Самоучитель Python
- Карта сайта
- Отзывы на книги по Python
- Реклама на сайте
Руководство по модулю Python itertools
Python — универсальный язык программирования, предлагающий несколько встроенных библиотек, которые облегчают и повышают эффективность написания кода. Одной из таких библиотек является itertools. Она представляет собой набор функций, позволяющих работать с итерациями в Python. Эта статья поможет вам освоить функции Python-модуля itertools, чтобы создавать более эффективный и результативный код.
Что такое itertools?
Itertools — это Python-модуль, который предоставляет набор функций для работы с итерируемыми объектами. Итерируемый объект — это любой объект, предоставляющий возможность пройти по своим элементам, например список, кортеж и словарь. Itertools позволяет выполнять стандартные операции с итерируемыми объектами, такие как фильтрация, группировка и объединение.
Модуль Itertools предоставляет несколько функций, позволяющих манипулировать итерируемыми объектами. Рассмотрим подробнее наиболее полезные функции itertools.
1. permutations() : эта функция возвращает все возможные перестановки итерируемого объекта с уникальным расположением элементов в итераторе.
import itertools
letters = ['a', 'b', 'c']
perms = itertools.permutations(letters)
for perm in perms:
print(perm)
('a', 'b', 'c')
('a', 'c', 'b')
('b', 'a', 'c')
('b', 'c', 'a')
('c', 'a', 'b')
('c', 'b', 'a')
2. combinations() : эта функция возвращает все возможные комбинации элементов в итерируемом объекте, не повторяя в итераторе ни одной из комбинаций. Если указан опциональный аргумент r, будут возвращены только комбинации длины r.
import itertools
numbers = [1, 2, 3, 4]
combs = itertools.combinations(numbers, 2)
for comb in combs:
print(comb)
(1, 2)
(1, 3)
(1, 4)
(2, 3)
(2, 4)
(3, 4)
3. product() : эта функция возвращает декартово произведение итерируемых объектов. Получаемый итератор содержит кортежи, каждый из которых формируется путем отбора по одному элементу из каждого итерируемого объекта. Если указан опциональный аргумент repeat, то входные итерируемые объекты повторяются указанное количество раз.
import itertools
colors = ['red', 'green', 'blue']
sizes = ['small', 'medium', 'large']
combos = itertools.product(colors, sizes)
for combo in combos:
print(combo)
('red', 'small')
('red', 'medium')
('red', 'large')
('green', 'small')
('green', 'medium')
('green', 'large')
('blue', 'small')
('blue', 'medium')
('blue', 'large')
4. groupby() : эта функция группирует элементы в конкретном итерируемом объекте на основе значения, возвращаемого функцией key. Получаемый в результате итератор содержит кортежи, в каждом из которых первый элемент — ключ группировки, а второй — итератор по элементам в группе.
import itertools
fruits = [,
,
,
,
]
fruits.sort(key=lambda x: x['color'])
for color, group in itertools.groupby(fruits, lambda x: x['color']):
print(color)
for fruit in group:
print(fruit['name'])
green
pear
orange
orange
red
apple
strawberry
yellow
banana
5. chain() : эта функция объединяет указанные итерируемые объекты в один итерируемый объект. Она возвращает итератор, в котором последовательно выполняется перебор элементов каждого итерируемого объекта.
import itertools
colors = ['red', 'green', 'blue']
sizes = ['small', 'medium', 'large']
for item in itertools.chain(colors, sizes):
print(item)
red
green
blue
small
medium
large
6. count() : эта функция возвращает итератор, который производит бесконечную последовательность чисел, начиная с заданного начального значения и увеличивая на заданное значение шага.
import itertools
for i in itertools.count(5, 2):
print(i)
if i > 15:
break
5
7
9
11
13
15
17
7. cycle() : эта функция возвращает итератор, который производит элементы конкретного итерируемого объекта многократно и бесконечно.
import itertools
colors = ['red', 'green', 'blue']
for color in itertools.cycle(colors):
print(color)
red
green
blue
red
green
blue
red
.
8. dropwhile() : эта функция возвращает итератор, который производит элементы конкретного итерируемого объекта после того, как функция-предикат в первый раз вернет False.
import itertools
numbers = [1, 3, 5, 7, 2, 4, 6, 8]
for num in itertools.dropwhile(lambda x: x % 2 != 0, numbers):
print(num)
2
4
6
8
9. takewhile() : эта функция возвращает итератор, который производит элементы в заданном итераторе до тех пор, пока функция-предикат не вернет False в первый раз.
import itertools
numbers = [1, 3, 5, 2, 4, 6]
for num in itertools.takewhile(lambda x: x % 2 != 0, numbers):
print(num)
10. tee() : эта функция возвращает n независимых итераторов конкретного итерируемого объекта. Каждый итератор выдает те же элементы, что и исходный итерируемый объект.
import itertools
numbers = [1, 2, 3, 4, 5]
iters = itertools.tee(numbers, 3)
for it in iters:
for num in it:
print(num)
1
2
3
4
5
1
2
3
4
5
1
2
3
4
5
Заключение
Python-модуль itertools — это мощный инструмент для работы с итерациями. Использование функций, предоставляемых itertools, позволяет легко выполнять сложные операции с итерируемыми объектами, не прибегая к написанию длинного и сложного кода. Функции itertools оптимизированы для повышения производительности, что делает их идеальными при работе с большими наборами данных.
Освоение itertools поможет вам подняться на новый уровень программирования и стать более эффективным разработчиком Python. Примеры, приведенные в этом руководстве по Python-модулю itertools, помогут вам использовать itertools для решения сложных проблем в собственном коде, чтобы писать более чистые и эффективные программы на Python.
- 6 способов оптимизировать рабочий процесс в Pandas
- Как стать инженером Python в 2023 году
- 5 впечатляющих возможностей Julia, которых не хватает в Python
Читайте нас в Telegram, VK и Дзен
Itertools
Стандартная библиотека функций языка Python дает возможность программисту создавать определенные последовательности объектов и всячески ими манипулировать. При помощи простых итераций, действующих в цикле, можно наполнять массивы неким содержимым, а пользуясь генераторами списков – задавать более сложные условия для их формирования. Подключаемый модуль itertools позволяет расширить данный функционал.
Что такое itertools?
Данное расширение является сборником полезных итераторов, повышающих эффективность работы с циклами и генераторами последовательностей объектов. Это достигается за счет лучшего управления памятью в программе, быстрого выполнения подключаемых функций, а также сокращения и упрощения кода. Готовые методы, реализованные в данной библиотеке, принимают различные параметры для управления генератором последовательности, чтобы вернуть вызывающей подпрограмме необходимый набор объектов.
В этой статье рассматривается модуль itertools, присутствующий в 3-ей версии языка Python, хотя он также доступен и для Python 2. Чтобы воспользоваться возможностями данного пакета, стоит импортировать библиотеку, предварительно указав метод, к которому будет происходить обращение в программе. Например, для вызова функции product, следует поместить в начало файла следующую инструкцию: from itertools import product . После этого программист получает возможность обращаться к методу по его имени. Если нужно использовать несколько функций — можно их названия перечислить через запятую.
Можно так же подключить модуль itertools в Python просто записав в начале программы import itertools * . При таком подключении необходимо будет обращаться к той же функции product следующим образом: itertools.product( [аргументы функции] ) .
Бесконечная итерация
На сегодняшний день существует три функции-итератора, действие которых не прерывается автоматически.
К ним относятся методы:
С помощью этих методов можно генерировать объекты или совершать определенные действия неограниченное количество раз. Это значит, что программисту потребуется самостоятельно прервать созданный цикл.
count
Данный метод создает равномерно распределенную последовательность, генерируя объекты при помощи одного или двух параметров пользователя. Первым аргументом здесь является стартовое значение набора данных, а вторым (необязательным) – длина постоянного шага. Следующий пример демонстрирует работу этого метода в небольшом цикле.
from itertools import count for i in count(0, 2): if i >= 10: break else: print(i) 0 2 4 6 8
Как видно из результатов выполнения программы, цикл for работает с функцией count, которая в свою очередь получает стартовое значение последовательности 0 и длину шага 2. Переменная под названием i является временным хранилищем для каждого нового числа. В теле цикла используется конструкция if, ограничивающая действие генератора значением 10. Если в текущей итерации i меньше или равно 10, цикл прерывается при помощи break. В противном же случае происходит вывод значения через функцию print.
cycle
Следующий итератор позволяет создать бесконечный цикл, поочередно выводящий некие символы или числа. В качестве аргумента в данном случае выступает объект либо некий набор объектов, которые можно перечислить один за другим. Код, приведенный ниже, показывает работу функции cycle со строкой DOG в цикле for.
from itertools import cycle count = 1 for i in cycle('DOG'): if count > 5: break print(i) count += 1 D O G D O
Таким образом, результатом работы программы становится поочередный вывод символов строки, которая является аргументом метода cycle. Поскольку данный итератор также не имеет автоматических ограничений на число новых объектов, стоит воспользоваться счетчиком для его остановки. С помощью переменной count, увеличивающей свое значение на 1 за каждый шаг цикла, эта задача решается довольно просто.
repeat
Последний из подобных итераторов осуществляет повторение объекта, который был передан в качестве первого параметра в метод. Вторым аргументом является количество идентичных элементов в создаваемой последовательности. Следующий пример показывает заполнение списка с именем data при помощи генератора с циклом for. В роли объекта здесь выступает строка DOG, которую добавляют в последовательность ровно 3 раза.
from itertools import repeat data = [i for i in repeat('DOG', 3)] print(data) ['DOG', 'DOG', 'DOG']
Результаты работы программы отображаются благодаря методу print, получающему готовый список data для вывода на экран. На месте первого параметра функции repeat может стоять не только строка, но и число, символ, а также другой список с любыми данными.
Комбинация значений
В данный момент имеется всего четыре функции-итератора, позволяющие комбинировать различные значения, меняя местами их составляющие. К их числу относятся такие методы как:
- combinations;
- combinations_with_replacement;
- permutations;
- product.
combinations
Первая функция по комбинированию отдельных элементов последовательности принимает два аргумента, как и все последующие. Первый позволяет задать определенный объект, а второй – количество значений, которые будут присутствовать в каждом новом отрезке. В данном примере демонстрируется работа в Python функции combinations библиотеки itertools при создании списка.
from itertools import combinations data = list(combinations('DOG', 2)) print(data) [('D', 'O'), ('D', 'G'), ('O', 'G')]
Как видно из кода, метод получает строку DOG, которая впоследствии раскладывается на отдельные символы. Далее происходит группировка по 2 буквы так, чтобы каждая новая выборка отличалась от всех существующих. Функция print выводит полученный список data на экран, отображая все сформированные пары символов D, O, G.
combinations_with_replacement
Более продвинутая вариация предыдущего итератора предоставляет программе возможность делать выборку из отдельных элементов с учетом их порядка. В следующем образце кода показано использование combinations_with_replacement с уже известными аргументами.
from itertools import combinations_with_replacement for i in combinations_with_replacement('DOG', 2): print(''.join(i)) DD DO DG OO OG GG
В результате работы программы, на экране отобразилось несколько групп элементов, не повторяющих порядок друг друга. При этом вполне могут использоваться одинаковые объекты, если их общее расположение не совпадает с предыдущими выборками.
permutations
Работа функции permutations модуля itertools в Python похожа на комбинацию со сменой порядка. Однако в ней не допускается размещение идентичных элементов в одной группе. Ниже приведен код, демонстрирующий поведение и результат выполнения этого метода в цикле for.
from itertools import permutations for i in permutations('DOG', 2): print(''.join(i)) DO DG OD OG GD GO
На выходе программа отображает несколько пар значений, так как в качестве второго аргумента функция получила 2. Важно заметить, что каждая новая выборка отличается от всех предыдущих только порядком, а общая последовательность может включать в себя группы, состоящие из одних и тех же значений, просто сменивших расположение.
product
Последний из комбинационных итераторов получает в качестве параметра массив данных, состоящий из нескольких групп значений. Функция product библиотеки itertools в Python 3 позволяет получить из введенной последовательности чисел или символов новую совокупность групп во всех возможных вариациях. Следующий пример показывает исполнение этого метода.
from itertools import product data = list(product((0, 1), (2, 3))) print(data) [(0, 2), (0, 3), (1, 2), (1, 3)]
Таким образом, получается новая последовательность data, вмещающая в себя все возможные комбинации значений, полученных из начального списка. Как и в других примерах, функция print выводит все ее содержимое на экран.
Фильтрация последовательности
Для управления данными в списке или любой другой последовательности значений также используются инструменты фильтрации. Некоторые функции, входящие в состав пакета itertools умеют автоматически удалять отдельные элементы, не удовлетворяющие заданных программистом условий. На данный момент времени таких итераторов существует всего четыре:
- filterfalse;
- dropwhile;
- takewhile;
- compress.
filterfalse
Для создания нового списка из уже имеющейся последовательности объектов можно применять метод фильтрации filterfalse. В качестве первого аргумента здесь выступает проверочная функция, возвращающая булево значение True или False. Вторым параметром является список неких объектов, над которыми нужно провести фильтрацию, воспользовавшись результатом выполнения проверочной функции.
from itertools import filterfalse data = list(filterfalse(lambda i: i == 0, [1, 2, 3, 0, 4, 5, 1])) print(data) [1, 2, 3, 4, 5, 1]
Как можно увидеть из примера, в лямбда-функции осуществляется проверка на равность нулю. Элементы последовательности, для которых такая проверка возвращает False, заносятся в новый список, после чего выдаются на экран.
dropwhile
Следующая функция работает несколько иным образом, хотя используется та же схема. Итератор dropwhile проверяет булево значение, возвращаемое в качестве первого параметра для каждого элемента последовательности, и в том случае, если он равен False, записывает его в новый список, а также все, что идет после.
from itertools import dropwhile data = list(dropwhile(lambda i: i != 0, [1, 2, 3, 0, 4, 5, 1])) print(data) [0, 4, 5, 1]
В данном примере показано, что при помощи лямбда-функции выполняется проверка на неравенство нулю. После того как в последовательности найден 0, все последующие числовые значения сохраняются в новый список.
takewhile
Совершенно противоположным образом работает итератор takewhile, записывая в массив только те элементы, которые шли до возврата проверочной функцией значения False. Следующий пример демонстрирует работу данного метода.
from itertools import takewhile data = list(takewhile(lambda i: i != 0, [1, 2, 3, 0, 4, 5, 1])) print(data) [1, 2, 3]
Как можно заметить, результирующий список получил значения, которые шли до 0.
compress
Иногда возникает необходимость в удалении ненужных объектов последовательности, просто передав ей булевы значения. Для этого используется метод compress, получающий в следующем примере строку и набор из True и False для каждого ее символа.
from itertools import compress data = list(compress('DOG', [True, False, True])) print(data) ['D', 'G']
В результате получается список, в котором присутствуют только элементы, отмеченные ранее как True. Символ O был удален, так как ему соответствовал False.
Прочие итераторы
Несмотря на то, что существуют инструменты библиотеки itertools, не вошедшие ни в один из описанных ранее разделов, их применение иногда также бывает очень полезным для решения многих довольно специфических задач. Часто они становятся актуальны в паре с другими итераторами. Далее будут описаны такие методы как:
- chain;
- chain.from_iterable
- starmap
- accumulate;
- islice;
- izip;
- tee;
- groupby.
chain
Функция chain выполняет объединение списков, как это показано в следующем примере для data1 и data2. Итоговый массив содержит все элементы данных последовательностей.
from itertools import chain data1 = ['D', 'O', 'G'] data2 = [0, 1, 2, 3, 4] data = list(chain(data1, data2)) print(data) ['D', 'O', 'G', 0, 1, 2, 3, 4]
chain.from_iterable
Работает аналогично chain. Также выполняется объединение списков. Отличие заключается в том, что аргумент только один — вложенный список со списками, которые надо объединить.
from itertools import chain data = [['D', 'O', 'G'], [0, 1, 2, 3, 4]] data2 = [0, 1, 2, 3, 4] data = list(chain.from_iterable(data)) print(data) ['D', 'O', 'G', 0, 1, 2, 3, 4]
starmap
Первый аргумент — это функция. Второй аргумент — это с писок параметров, подаваемых на функцию. В качестве примера была взята стандартная функция pow, которая позволяет возводить число в степень.
from itertools import starmap for i in starmap(pow, [(1, 2), (2, 2), (3, 2)]): print(i) 1 4 9
accumulate
Данная функция модуля itertools — accumulate высчитывает сумму предыдущих элементов и добавляет текущий к ней. Вот пример:
from itertools import accumulate data = list(accumulate([1,2,3,4])) print(data) [1, 3, 6, 10]
Видно из кода, что первый полученный элемент равен первому заданному значению. Второй — это сумма предыдущего результата со вторым заданным значением. И так далее.
islice
Итератор islice позволяет ограничить заполнение списка новыми элементами, если ввести в качестве параметра желаемое количество объектов. Данный пример показывает совместную работу методов count и islice для создания 5 чисел, начиная с 0 и с шагом 2.
from itertools import islice from itertools import count for i in islice(count(0, 2), 5): print(i) 0 2 4 6 8
zip_longest
Функция zip_longest требуется в тех случаях, когда необходимо произвести спаривание отдельных элементов последовательности. Параметр fillvalue позволяет обозначить объект, которым будут заполнятся недостающие ячейки списка.
from itertools import zip_longest for i in zip_longest('DOG', [0, 1, 2, 3], fillvalue = ' '): print (i) ('D', 0) ('O', 1) ('G', 2) (' ', 3)
tee
Метод tee используется для генерации собственных итераторов на основе итерируемой последовательности объектов. В примере показано создание итераторов i1 и i2.
from itertools import tee data = 'DOG' i1, i2 = tee(data) for i in i1: print(i) for i in i2: print(i) D O G D O G
groupby
Последняя функция в этом разделе называется groupby и применяется для группировки объектов списка по общим значениям. Приведенный код показывает форматированную выдачу данных массива animals. Как видно из примера, метод itertools groupby принимает в качестве первого аргумента сам список, в то время как на месте второго стоит лямбда-функция.
from itertools import groupby animals = [('CAT', 'TOM'), ('MOUSE', 'JARRY')] for key, group in groupby(animals, lambda kind: kind[0]): for kind, name in group: print(' is a '.format(name = name, kind = kind)) TOM is a CAT JARRY is a MOUSE
Резюме
Таким образом, в данной статье были описаны все методы, включенные в состав пакета itertools. Следующая таблица отображает краткую сводку по всем пройденным функциям, включая в себя особенности их вызова и назначение.
| Название | Назначение |
| count | Итерация с заданным шагом без ограничений |
| cycle | Итерация с повторением без ограничений |
| repeat | Итерация с повторением заданное количество раз |
| combinations | Комбинация всех возможных значений без повторяющихся элементов |
| combinations_with_replacement | Комбинация всех возможных значений с повторяющимися элементами |
| permutations | Комбинация с перестановкой всех возможных значений |
| product | Комбинация, полученная из всех возможных значений вложенных списков |
| filterfalse | Все элементы, для которых функция возвращает ложь |
| dropwhile | Все элементы, начиная с того, для которого функция вернет ложь |
| takewhile | Все элементы, до тех пор, пока функция не вернет истину |
| compress | Удаление элементов, для которых было передано значение ложь |
| chain | Поочередное объединение списков при помощи итераторов |
| chain.from_terable | Аналогично chain, но аргумент — список, в который вложены объединяемые списки. |
| islice | Получение среза, благодаря указанному количеству элементов |
| zip_longest | Объединение нескольких итераций с повышением размера до максимального |
| tee | Создание кортежа из нескольких готовых итераторов |
| groupby | Группировка элементов последовательности по некоторым ключевым значениям |
| accumulate | Каждый элемент результирующей последовательности равен сумме текущего и всех предыдущих исходной последовательности |
| starmap | В заданную функцию передает список подставляемых аргументов |
Заключение
Библиотека itertools содержит массу полезных методов. Они помогают генерировать списки, а также любые другие последовательности значений с определенными условиями. Пользуясь ее возможностями, можно заполнять наборы данных числами с итерацией, комбинировать символы строк и фильтровать элементы массива по признакам. В данной статье описаны все методы библиотеки itertools, содержащиеся в официальной документации Python 3. Для большей наглядности приведены подробные примеры использования функций.