icecream — это минималистичная библиотека для отладки, которая выводит переменные и выражения вместе с их именами.
Полезна при быстрой проверке значений без написания дополнительных print() и форматирования.
from icecream import ic
def divide(a, b):
ic(a, b)
return a / b
result = divide(10, 2)
ic(result)
ic| a: 10, b: 2
ic| result: 5.0
➕ Преимущества:
pip install icecream
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14❤🔥4
sorcery — это удобная отладочная библиотека, которая позволяет печатать переменные с их именами с помощью магического
print(expr)
— без необходимости вручную писать имена.Полезна, когда нужно быстро выводить значения переменных для отладки, но лень писать
f"{var=}"
или использовать ic()
.from sorcery import spell
@spell
def test():
name = "Alice"
age = 30
print(name, age) # Автоматически напечатает: name='Alice', age=30
test()
name='Alice', age=30
➕ Преимущества:
pip install sorcery
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11
cloup — это расширение для Click, добавляющее поддержку группировки опций, взаимных зависимостей и контекстных ограничений.
Полезно, если ты создаёшь сложные CLI-инструменты с множеством параметров и хочешь сделать интерфейс логичным и защищённым от ошибок пользователя.
import cloup
from cloup import option_group
@cloup.command()
@option_group(
"Авторизация",
cloup.option("--user", help="Имя пользователя"),
cloup.option("--token", help="API токен")
)
@option_group(
"Настройки вывода",
cloup.option("--verbose", is_flag=True),
cloup.option("--json", is_flag=True)
)
def cli(user, token, verbose, json):
print(f"👤 User: {user}, Token: {token}")
print(f"🔧 Verbose: {verbose}, JSON: {json}")
if __name__ == "__main__":
cli()
➕ Преимущества:
--help
pip install cloup
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9❤🔥2
PyFunctional — это мощная библиотека для декларативной обработки коллекций в стиле функционального программирования. Позволяет применять map, filter, reduce и другие операции к потокам данных с лаконичным синтаксисом.
Идеально подходит, если ты хочешь работать с данными в цепочках и писать код, близкий к Scala или LINQ.
from functional import seq
# Работа с коллекцией: фильтрация, преобразование, агрегация
data = seq([1, 2, 3, 4, 5]) \
.filter(lambda x: x % 2 == 0) \
.map(lambda x: x * 10) \
.reduce(lambda x, y: x + y)
print(data) # 60
# Обработка строк и списков словарей
names = seq(["Alice", "Bob", "Charlie"]).map(str.upper).to_list()
print(names) # ['ALICE', 'BOB', 'CHARLIE']
users = [
{"name": "Alice", "age": 30},
{"name": "Bob", "age": 20},
{"name": "Charlie", "age": 25}
]
youngest = seq(users).min_by(lambda u: u["age"])
print(youngest) # {'name': 'Bob', 'age': 20}
➕ Преимущества:
filter
, map
, group_by
, sum
, reduce
, flatten
pip install PyFunctional
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10🔥4
yaspin — это легковесная и мощная библиотека для отображения текстовых спиннеров в терминале во время длительных операций.
Отлично подходит для CLI-приложений — улучшает UX, показывает, что скрипт активно работает, и при этом не усложняет код.
import time
from yaspin import yaspin
# Начало спиннера с текстом и цветом
with yaspin(text="Загрузка...", color="cyan") as spinner:
time.sleep(2) # длительная операция
spinner.ok("✅ ") # смена иконки при успешном завершении
Или как декоратор:
from yaspin import yaspin
@yaspin(text="Обработка данных...")
def process():
time.sleep(3)
return "done"
process()
➕ Преимущества:
stdout/stderr
— шрифты не слетаютpip install yaspin
Please open Telegram to view this post
VIEW IN TELEGRAM
3👍12
python-box — это удобная библиотека, которая превращает обычные словари в объекты с доступом по точке (
dot notation
). Позволяет обращаться к полям как к атрибутам, что упрощает чтение и работу с конфигами или API-ответами.Идеально подходит для тех, кто устал писать
dict["key"]
и хочет более лаконичный стиль кода.from box import Box
data = {
"user": {
"name": "Alice",
"age": 30
},
"settings": {
"theme": "dark"
}
}
# Преобразуем в Box
box_data = Box(data)
# Доступ по точке
print(box_data.user.name) # Alice
print(box_data.settings.theme) # dark
# Изменения также работают
box_data.user.age = 31
print(box_data.user.age) # 31
➕ Преимущества:
obj.key
вместо obj['key']
Box.to_dict()
)pip install python-box
Please open Telegram to view this post
VIEW IN TELEGRAM
❤🔥11👍7🤔2
addict — это минималистичная библиотека, превращающая обычные словари в объекты с доступом к ключам через точку (dot notation), создавая при этом вложенные поля на лету.
Идеальна, если ты хочешь создавать или модифицировать конфигурации, структуры данных или JSON-like объекты в удобной форме без лишней возни.
from addict import Dict
config = Dict()
# Автоматически создаёт вложенные структуры
config.user.name = "Alice"
config.user.age = 30
config.theme.dark_mode = True
print(config) # {'user': {'name': 'Alice', 'age': 30}, 'theme': {'dark_mode': True}}
# Обратная совместимость
print(config['user']['name']) # Alice
➕ Преимущества:
pip install addict
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10
glom — это мощный инструмент для безопасного доступа, трансформации и извлечения данных из сложных вложенных структур (
dict
, list
, JSON и др.).Идеальна, если ты работаешь с вложенными данными из API, конфигов или сериализованных структур и хочешь избежать множества
try/except
и проверок ключей.from glom import glom
data = {
"user": {
"profile": {
"name": "Alice",
"contacts": {
"email": "alice@example.com"
}
}
}
}
# Извлекаем вложенное значение
name = glom(data, 'user.profile.name')
print(name) # Alice
# Значение по умолчанию, если путь не существует
phone = glom(data, 'user.profile.contacts.phone', default='N/A')
print(phone) # N/A
# Преобразование структуры
spec = {
"username": "user.profile.name",
"email": "user.profile.contacts.email"
}
user_info = glom(data, spec)
print(user_info) # {'username': 'Alice', 'email': 'alice@example.com'}
➕ Преимущества:
dict
, list
, tuple
, lambda
)pip install glom
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥6👍4
exrex — это генератор строк, соответствующих заданному регулярному выражению. В отличие от стандартной библиотеки
re
, он не проверяет соответствие строки паттерну, а генерирует строки, которые этому паттерну соответствуют.import exrex
# Сгенерировать одну случайную строку по шаблону
print(exrex.getone(r'[A-Z]{3}\d{2}'))
# ➔ Например: 'QWE84'
# Все возможные строки (для ограниченных шаблонов)
for s in exrex.generate(r'ab[1-2]'):
print(s)
# ➔ ab1, ab2
# Количество всех возможных совпадений (если конечное множество)
count = sum(1 for _ in exrex.generate(r'[A-B][1-3]'))
print(count) # ➔ 6
# Выводит шаблон в обратную сторону (reverse regex)
print(exrex.getone(r'(foo|bar){2}\d{1,2}'))
➕ Преимущества:
pip install exrex
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7❤🔥2
porcupine — это минималистичная библиотека для создания простых интерактивных CLI-приложений с возможностью подсветки, автодополнения и асинхронного ввода.
Основана на prompt_toolkit, но упрощает его использование.
from porcupine import interactive
@interactive
def shell():
while True:
cmd = input(">> ")
if cmd == "exit":
break
print(f"Вы ввели: {cmd}")
shell()
➕ Преимущества:
click
, rich
, prompt_toolkit
pip install porcupine
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6❤🔥2
icontract — это надёжная библиотека для Design by Contract (контрактное программирование) в Python. Добавляет
@require
, @ensure
, @invariant
, что помогает явно описывать предусловия, постусловия и инварианты в коде.Идеальна для повышения читаемости функции, обнаружения ошибок на ранних этапах и самодокументирования.
import icontract
@icontract.require(lambda x: x >= 0)
@icontract.ensure(lambda result: result >= 0)
def sqrt(x: float) -> float:
return x ** 0.5
print(sqrt(16)) # ➔ 4.0
sqrt(-1) # ❌ ViolationError: x >= 0
@icontract.invariant(lambda self: self.balance >= 0)
class Account:
def __init__(self, balance: int) -> None:
self.balance = balance
@icontract.require(lambda self, amount: amount > 0)
@icontract.ensure(lambda self, OLD: self.balance == OLD.self.balance - amount)
def withdraw(self, amount: int) -> None:
self.balance -= amount
➕ Преимущества:
pip install icontract
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7❤🔥3
pyrsistent — это функциональная библиотека для работы с неизменяемыми (immutable) структурами данных: списками, словарями, множествами и др.
Идеально подходит для надёжных систем, где важно избежать нежелательных побочных эффектов и сохранить предыдущие состояния данных — например, в конфигурациях, многопоточности и тестах.
from pyrsistent import pvector, pmap
# Неизменяемый список
v = pvector([1, 2, 3])
v2 = v.append(4)
print(v) # ➔ [1, 2, 3]
print(v2) # ➔ [1, 2, 3, 4]
# Неизменяемый словарь
m = pmap({"user": "alice", "active": True})
m2 = m.set("active", False)
print(m["user"]) # ➔ alice
print(m2["active"]) # ➔ False
# Все оригинальные данные остаются неизменными
print(m["active"]) # ➔ True
➕ Преимущества:
dataclasses
и copy.deepcopy
)pip install pyrsistent
Please open Telegram to view this post
VIEW IN TELEGRAM
❤🔥6👍2
returns — это библиотека для написания чистого и безопасного функционального кода в Python. Она добавляет контейнеры вроде
Result
, Maybe
, IO
, и другие концепции из Haskell / Scala, помогая избавиться от None
, try/except
, и повышая предсказуемость кода.Идеальна, если ты хочешь писать декларативно, безопасно и без side-effect'ов.
from returns.result import Result, Success, Failure
def divide(x: int, y: int) -> Result[float, str]:
if y == 0:
return Failure("Деление на ноль")
return Success(x / y)
result = divide(10, 2).map(lambda x: x * 2)
print(result) # ➔ <Success: 10.0>
error = divide(10, 0).map(lambda x: x * 2)
print(error) # ➔ <Failure: 'Деление на ноль'>
➕ Преимущества:
Result
, Maybe
, IO
, RequiresContext
— как в языках с strong typingtry/except
.map()
, .bind()
и .alt()
для чистого, цепочного кодаmypy
и типизациейpip install returns
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7❤🔥2