10 мощных функций из стандартной библиотеки Python

10 мощных функций из стандартной библиотеки Python Статьи

Подпишись на мой канал в Telegram

Сегодня я пишу о доступных функциях в стандартной библиотеки и расскажу про их применение.

Введение

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

Примечание: в этой статье будет использоваться версия Python 3.7+.

Функция enumerate

Функция enumerate удобна, когда вы хотите отслеживать индекс во время цикла итерации. Функция может удалить переменные счетчика, которые вы могли бы использовать, если бы перешли в Python с другого языка. Рассмотрим пример:

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

Способ работы enumerate заключается в возврате объекта enumerate с помощью метода __next__, который возвращает кортеж (count, value). Вы даже можете использовать деструктуризацию для перечисления более сложных значений:

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

Функция zip

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

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

Удаление ручной индексации облегчает понимание кода, поскольку устраняет шаг размышления о том, чему соответствует индекс. Если вы чувствуете себя странно, вы можете объединить enumerate с zip, потому что enumerate не заботится о том, какой тип итерации он получает:

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

Функция map

Функция map мощна в своей общности, и её понимание может помочь вам ускорить вычисления с помощью многопроцессорной обработки. Концептуально map применяет заданную функцию к каждому элементу в итерационной модели и возвращает результаты по порядку. Мы можем использовать lambda для быстрого создания функции «f(x) = abs(x ** 2 — 4 * x)» и сопоставить её с некоторыми значениями x:

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

С map ясно, что мы пытаемся применить func ко всем xs, но не указывая точно, как это сделать. Например, если бы xs был большим вектором, мы могли бы ускорить это вычисление, используя аналогичный метод map на объекте multiprocessing.Pool:

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

Обратите внимание, что мы используем ключевое слово with для создания контекста управления ресурсами обработки «pool». Функция cpu_count вернет количество тел, доступных в программе, а pool.map будет применять func к элементам xs параллельно. Это демонстрирует, что map также предоставляет полезный синтаксис для выражения одной программы и вычисления в стиле множественных данных (SPMD).

Функция dir

Функция dir полезна для выполнения самоанализа объектов Python (чтобы увидеть, какие атрибуты у них есть). Например, мы можем использовать dir, чтобы увидеть, что определено в модуле os:

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

Мы также можем использовать dir для наблюдения специальных методов, лежащих в основе модели данных Python:

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

В этом списке вы можете видеть не только такие методы, как append и sort, но и метод __iter__, который возвращает объект итератора при включении.

Модуль string

Модуль string содержит полезные константы, которые могут сэкономить вам время при вводе текста. Например, если вам когда-нибудь понадобятся все буквы английского алфавита, вы можете использовать «string.ascii_lowercase» или «string.ascii_uppercase»:

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

Я использовал string.ascii_uppercase при работе с 384-луночными пластинами, имеющими названия скважин от «A1» до «P24».

Модуль itertools

Как следует из названия, модуль itertools содержит утилиты для работы с iterables. Эти строительные блоки итератора не только обеспечивают эффективность памяти за счет ленивого выполнения, но и обеспечивают чистый синтаксис для нескольких распространенных преобразований.

itertools.cycle

Функция «itertools.cycle» принимает итерацию и возвращает итератор, который будет бесконечно перебирать исходные входные значения:

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

Как вы можете видеть, это может быть полезно для циклического перебора стилей построения графиков, где громоздко указывать тонну стилей и хорошо повторять некоторые. Обратите внимание, что цикл использовался внутри zip, поэтому итератор циклических стилей не исчерпал себя, несмотря на присутствие len(styles) < n_lines.

itertools.product

Функция itertools.product возвращает декартово произведение входных итераций, что является просто причудливым способом сказать, что она создает сетку:

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

Здесь мы получаем список из 384 кортежей (16 строк * 24 столбца), которые циклически, как одометр, проходят через входные итерации.

Модуль functools

Модуль functools содержит функции, которые действуют на другие функции. Здесь вы можете найти множество отличных утилит функционального программирования.

functools.partial

Функция functools.partial позволяет нам заранее указывать определенные аргументы в виде фиксированных значений. Такая функция возвращает новую функцию, которая принимает меньше аргументов:

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

Код выводит 16, потому что g(x) = f(x, y=0) = abs(x ** 2). Это особенно полезно при работе с функциями более высокого порядка, которые предполагают определенную сигнатуру для входной функции (то есть использование pool.map для многопроцессорной обработки).

Полезные модули ввода-вывода

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

json

Модуль json предоставляет встроенный интерфейс для чтения и записи данных «JSON»:

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

Этот модуль особенно полезен при работе с данными из интернета, выполнении собственного скребка или работе с другими языками, которые хорошо работают с «JSON».

pickle

Модуль pickle предоставляет встроенный интерфейс для чтения и записи сортированных объектов. Pickling — это процесс сериализации объектов Python в плоскую двоичную структуру, которая может быть записана на диск. Поэтому модуль «pickle» полезен для сохранения объекта в его текущем состоянии для последующего использования:

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

Этот вариант часто используется в приложениях машинного обучения, где methods являются объектами Python, а weights — это внутреннее состояние, которое должно быть сохранено.

Заключение

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

close

Бесплатная подписка

Введи свой адрес электронной почты и получай моментальный доступ к новым публикациям на сайте

Вступи в мою группу ВКонтакте

Егор Егоров

C 2017 года сижу на игле Python. Люблю создавать контент, который помогает людям понять сложные вещи. Не представляю жизнь без спорта и чувства юмора.

Если не сложно, напиши комментарий, как тебе статья.

Оцените автора
Егоров Егор
Добавить комментарий

  1. Николай

    а есть кто-то, кто использует питон и не знает про них?

    Ответить