Сегодня я пишу о доступных функциях в стандартной библиотеки и расскажу про их применение.
Введение
В экосистеме Python доступно множество потрясающих библиотек, но иногда все, что вам нужно — это встроенная функция. Это может быть не так гламурно, без брендинга нового пакета, но вы можете пройти долгий путь со стандартной библиотекой. Во всяком случае, изучение следующих встроенных модулей Python может помочь вам ускорить разработку и улучшить читабельность кода.
Примечание: в этой статье будет использоваться версия Python 3.7+.
Функция enumerate
Функция enumerate удобна, когда вы хотите отслеживать индекс во время цикла итерации. Функция может удалить переменные счетчика, которые вы могли бы использовать, если бы перешли в Python с другого языка. Рассмотрим пример:
Способ работы enumerate заключается в возврате объекта enumerate с помощью метода __next__, который возвращает кортеж (count, value). Вы даже можете использовать деструктуризацию для перечисления более сложных значений:
Функция zip
Функция zip полезна, когда вы хотите объединить несколько итераций вместе. Распространенным вариантом использования является цикл по двум спискам одновременно без прямой индексации. Например:
Удаление ручной индексации облегчает понимание кода, поскольку устраняет шаг размышления о том, чему соответствует индекс. Если вы чувствуете себя странно, вы можете объединить enumerate с zip, потому что enumerate не заботится о том, какой тип итерации он получает:
Функция map
Функция map мощна в своей общности, и её понимание может помочь вам ускорить вычисления с помощью многопроцессорной обработки. Концептуально map применяет заданную функцию к каждому элементу в итерационной модели и возвращает результаты по порядку. Мы можем использовать lambda для быстрого создания функции «f(x) = abs(x ** 2 — 4 * x)» и сопоставить её с некоторыми значениями x:
С map ясно, что мы пытаемся применить func ко всем xs, но не указывая точно, как это сделать. Например, если бы xs был большим вектором, мы могли бы ускорить это вычисление, используя аналогичный метод map на объекте multiprocessing.Pool:
Обратите внимание, что мы используем ключевое слово with для создания контекста управления ресурсами обработки «pool». Функция cpu_count вернет количество тел, доступных в программе, а pool.map будет применять func к элементам xs параллельно. Это демонстрирует, что map также предоставляет полезный синтаксис для выражения одной программы и вычисления в стиле множественных данных (SPMD).
Функция dir
Функция dir полезна для выполнения самоанализа объектов Python (чтобы увидеть, какие атрибуты у них есть). Например, мы можем использовать dir, чтобы увидеть, что определено в модуле os:
Мы также можем использовать dir для наблюдения специальных методов, лежащих в основе модели данных Python:
В этом списке вы можете видеть не только такие методы, как append и sort, но и метод __iter__, который возвращает объект итератора при включении.
Модуль string
Модуль string содержит полезные константы, которые могут сэкономить вам время при вводе текста. Например, если вам когда-нибудь понадобятся все буквы английского алфавита, вы можете использовать «string.ascii_lowercase» или «string.ascii_uppercase»:
Я использовал string.ascii_uppercase при работе с 384-луночными пластинами, имеющими названия скважин от «A1» до «P24».
Модуль itertools
Как следует из названия, модуль itertools содержит утилиты для работы с iterables. Эти строительные блоки итератора не только обеспечивают эффективность памяти за счет ленивого выполнения, но и обеспечивают чистый синтаксис для нескольких распространенных преобразований.
itertools.cycle
Функция «itertools.cycle» принимает итерацию и возвращает итератор, который будет бесконечно перебирать исходные входные значения:
Как вы можете видеть, это может быть полезно для циклического перебора стилей построения графиков, где громоздко указывать тонну стилей и хорошо повторять некоторые. Обратите внимание, что цикл использовался внутри zip, поэтому итератор циклических стилей не исчерпал себя, несмотря на присутствие len(styles) < n_lines.
itertools.product
Функция itertools.product возвращает декартово произведение входных итераций, что является просто причудливым способом сказать, что она создает сетку:
Здесь мы получаем список из 384 кортежей (16 строк * 24 столбца), которые циклически, как одометр, проходят через входные итерации.
Модуль functools
Модуль functools содержит функции, которые действуют на другие функции. Здесь вы можете найти множество отличных утилит функционального программирования.
functools.partial
Функция functools.partial позволяет нам заранее указывать определенные аргументы в виде фиксированных значений. Такая функция возвращает новую функцию, которая принимает меньше аргументов:
Код выводит 16, потому что g(x) = f(x, y=0) = abs(x ** 2). Это особенно полезно при работе с функциями более высокого порядка, которые предполагают определенную сигнатуру для входной функции (то есть использование pool.map для многопроцессорной обработки).
Полезные модули ввода-вывода
Использование этих встроенных модулей может быть мошенничеством, поскольку они сами по себе не являются функциями. Однако они предоставляют простые интерфейсы для чтения и записи различных типов данных, поэтому будет более логично рассматривать эти функции вместе.
json
Модуль json предоставляет встроенный интерфейс для чтения и записи данных «JSON»:
Этот модуль особенно полезен при работе с данными из интернета, выполнении собственного скребка или работе с другими языками, которые хорошо работают с «JSON».
pickle
Модуль pickle предоставляет встроенный интерфейс для чтения и записи сортированных объектов. Pickling — это процесс сериализации объектов Python в плоскую двоичную структуру, которая может быть записана на диск. Поэтому модуль «pickle» полезен для сохранения объекта в его текущем состоянии для последующего использования:
Этот вариант часто используется в приложениях машинного обучения, где methods являются объектами Python, а weights — это внутреннее состояние, которое должно быть сохранено.
Заключение
Обсуждаемые в данной статье функции — это всего лишь несколько примеров потрясающих встроенных функций, доступных в Python. В следующий раз, когда вы поймаете себя на том, что пытаетесь понять, как написать что-то ясным и кратким способом, подумайте о стандартной библиотеке Python. Это много раз помогало мне, и я надеюсь, что это поможет и вам.
а есть кто-то, кто использует питон и не знает про них?
может быть новички ?:)