boltons
— коллекция утилит, расширяющая стандартную библиотеку. Это почти как built-ins
, только boltons
😉Есть ли у вас в проекте файл
utils.py
или что-то подобное? Скорее всего, то что вы там храните, есть в boltons
.Код: https://github.com/mahmoud/boltons
Документация: https://boltons.readthedocs.io/
Там есть очень много всего, но вот, что мне особенно нравится:
* словари на любой вкус и цвет — и с поддержкой нескольких значений для одного ключа, и которые маппят ключ в значение и одновременно обратно значение в ключ (биекция);
* список, состоящий под капотом из множества других списков, оптимизированный для более эффективной работы при интенсивных вставках и удалениях;
* очень много функций для работы со строками —
camel2under
, under2camel
, slugify
, ordinalize
, cardinalize
, pluralize
, bytes2human
, ...;* утилиты для работы с датами — например, там есть функция, умеющая делать относительные человекочитаемые даты типа
"yesterday"
, "1 week ago"
, "3 days from now"
.Пакет не имеет зависимостей. Все функции самодостаточны, так что можно даже просто скопипастить к себе оттуда нужные (но лучше не надо). Конечно же, всё покрыто тестами.
#library
GitHub
GitHub - mahmoud/boltons: 🔩 Like builtins, but boltons. 250+ constructs, recipes, and snippets which extend (and rely on nothing…
🔩 Like builtins, but boltons. 250+ constructs, recipes, and snippets which extend (and rely on nothing but) the Python standard library. Nothing like Michael Bolton. - mahmoud/boltons
more_itertools
— расширение модуля itertools
из стандартной библиотеки.Код: https://github.com/more-itertools/more-itertools
Документация: https://more-itertools.readthedocs.io/
Библиотека содержит больше 100 различный функций-утилит, которые помогают обходить списки и итераторы более удобно, а также извлекать различные срезы, разбивать на части, склеивать обратно, проводить агрегации и так далее. Например:
* извлекать из списка или итератора значения чанками по N элементов (можно указать значение, которым должен быть дополнен последний чанк, либо он просто может быть меньше остальных);
* извлекать из итератора значения пересекающимися парами, по принципу
abcd
-> ab, bc, cd
;* превращать вложенную структуру в плоскую;
* расклеивать результат
zip
обратно в два отдельных итерируемых объекта;* различные группировки, агрегации, оконные функции, выборки, комбинаторика...
Короче, прям много всего есть. Модуль
itertools
в стандартной библиотеке — очень бедный. Регулярно натыкаюсь на необходимость делать что-то чанками/батчами, в такие моменты more_itertools
выручает.#library
GitHub
GitHub - more-itertools/more-itertools: More routines for operating on iterables, beyond itertools
More routines for operating on iterables, beyond itertools - more-itertools/more-itertools
toolz
— набор утилит для функционального программирования в Python.Код: https://github.com/pytoolz/toolz/
Документация: https://toolz.readthedocs.io/
Содержит в себе множество различных функций. Частично пересекается с
more_itertools
и boltons
, про которые я писал чуть выше.Все функции можно разбить на три категории:
*
itertoolz
;*
functoolz
;*
dicttoolz
.Самыми интересными на мой взгляд являются функции
compose
и curry
, которые составляют основу для ФП. В документации подробно расписано, зачем всё это нужно.Вот здесь, например, можно посмотреть как используется каррирование: https://blog.drewolson.org/declarative-validation (отсюда я, кстати, и узнал про эту библиотеку).
#library
GitHub
GitHub - pytoolz/toolz: A functional standard library for Python.
A functional standard library for Python. Contribute to pytoolz/toolz development by creating an account on GitHub.