Питонические атаки
1.19K subscribers
183 photos
4 videos
1 file
459 links
Всяческие заметки про программирование на Python и другие весёлые истории.
Download Telegram
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
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
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