glom — декларативная библиотека для извлечения и трансформации вложенных структур данных (dict/list/tuple). Позволяет описывать «что достать и как преобразовать» короткой спецификацией вместо ручных циклов и
if.🟢 Доступ к глубоко вложенным полям без try/except🟢 Маппинг и агрегирование списков одной строкой🟢 Значения по умолчанию и безопасные обходы отсутствующих ключей🟢 Композиция спецификаций для сложных преобразований
from glom import glom, T
data = {
"user": {"name": "Alice", "age": 30, "emails": ["a@x.io", "b@y.io"]},
"orders": [{"id": 1, "total": 99.9}, {"id": 2, "total": 15.0}]
}
spec = {
"username": T["user"]["name"],
"primary_email": T["user"]["emails"][0],
"order_ids": (T["orders"], [T["id"]]),
"sum_total": (T["orders"], sum, [T["total"]]), # суммируем totals
}
print(glom(data, spec))
# ➔ {'username': 'Alice', 'primary_email': 'a@x.io', 'order_ids': [1, 2], 'sum_total': 114.9}
# Безопасный доступ с дефолтом:
print(glom(data, "user.phone", default="no phone")) # ➔ 'no phone'
pip install glom
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2
Автор в статье дает конкретные советы по исправлению каждой проблемы и предупреждает о реальных рисках безопасности (включая известные CVE).
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Semaphore ограничивает количество корутин, которые могут выполнять определённый блок кода одновременно. Полезно для защиты API от превышения лимитов или для ограничения нагрузки на базу данных.
import asyncio
class ApiClient:
def __init__(self, max_concurrent=3):
self._semaphore = asyncio.Semaphore(max_concurrent)
async def fetch(self, url):
async with self._semaphore:
print(f"Начало запроса к {url}")
await asyncio.sleep(1) # имитация сетевого вызова
print(f"Завершён: {url}")
return {"data": url}
async def main():
client = ApiClient(max_concurrent=2) # максимум 2 запроса одновременно
urls = ["/api/1", "/api/2", "/api/3", "/api/4"]
tasks = [client.fetch(url) for url in urls]
results = await asyncio.gather(*tasks)
print(f"Получено {len(results)} результатов")
asyncio.run(main())
— При входе в async with счётчик семафора уменьшается на 1.
— Если счётчик 0, корутина ждёт, пока кто-то не выйдет (счётчик не увеличится).
— При выходе из блока счётчик снова увеличивается.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
«Вайб-кодинг» — слово года по версии словаря Collins
(на сленге - безработный🙂 )
🐍 Ghostly Python | #мем
(на сленге - безработный
Please open Telegram to view this post
VIEW IN TELEGRAM
❤🔥5❤1👍1😁1🤣1
Tenacity — это библиотека, которая автоматически перезапускает функцию при ошибке. Идеально для работы с сетевыми запросами, API, базами данных — везде, где код может временно упасть, но потом отработать.
from tenacity import retry, stop_after_attempt
import requests
# Повторить 3 раза при любой ошибке
@retry(stop=stop_after_attempt(3))
def get_data():
return requests.get("https://api.example.com/data").json()
# Использование
data = get_data() # если упадёт — автоматически повторит до 3 раз
pip install tenacityPlease open Telegram to view this post
VIEW IN TELEGRAM
👍6
Автор статьи максимально рассказал об автоматизации продаж и квалифицировании лидов в битрикс.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
TaskGroup автоматически следит за всеми запущенными в нём задачами. Если любая задача падает с ошибкой — отменяются все остальные, и вы точно ничего не пропустите. Удобнее и безопаснее, чем ручной gather/wait.
import asyncio
async def worker(name, delay):
print(f"Задача {name} стартует")
await asyncio.sleep(delay)
if name == "fail":
raise ValueError("Ошибка в задаче!")
print(f"Задача {name} завершена")
return f"Результат {name}"
async def main():
try:
async with asyncio.TaskGroup() as tg:
task1 = tg.create_task(worker("A", 1))
task2 = tg.create_task(worker("B", 2))
task3 = tg.create_task(worker("fail", 0.5))
task4 = tg.create_task(worker("C", 1.5))
# сюда мы попадём, только если все задачи успешны
print("Все задачи завершены без ошибок")
except Exception as e:
print(f"Перехвачено исключение: {e}")
# все незавершённые задачи уже отменены автоматически
asyncio.run(main())
— При входе в async with создаётся группа задач.
— Как только одна задача вызывает исключение — группа немедленно отменяет все остальные.
— После выхода из блока можно быть уверенным: либо все задачи выполнились успешно, либо ни одна «незакрытая» ошибка не осталась незамеченной.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2
На всякий случай:
yt-dlp --download-sections "*start_time-end_time"
<video_url>Please open Telegram to view this post
VIEW IN TELEGRAM
😁6👍4❤2
deque (двусторонняя очередь) из модуля collections — это более эффективная альтернатива спискам, когда часто требуется вставка или удаление с начала и конца.from collections import deque
# Создаём deque
queue = deque(["Алиса", "Боб", "Чарли"])
# Добавляем в конец и в начало
queue.append("Дэвид")
queue.appendleft("Эва")
print(queue) # ➔ deque(['Эва', 'Алиса', 'Боб', 'Чарли', 'Дэвид'])
# Удаляем с конца и начала
queue.pop() # ➔ 'Дэвид'
queue.popleft() # ➔ 'Эва'
print(queue) # ➔ deque(['Алиса', 'Боб', 'Чарли'])
deque оптимизирован для операций .append(), .appendleft(), .pop() и .popleft() — все выполняются за O(1), в отличие от обычного списка.maxlen=N) — полезно для реализации кольцевых буферов.Please open Telegram to view this post
VIEW IN TELEGRAM
❤🔥4
ㅤ
Страх.
Гнев.
Стыд.
Вина.
Тревога.
Апатия.
Уныние.
Изоляция.
Бессилие.
Контакт.
Тепло.
Чувство.
Живость.
Ясность.
Точность.
Присутствие.
Тишина.
Покой.
Если выбор сделан,
твоё место здесь:
мэверик
Входи осторожно.
Кислород
зашкаливает.
ㅤ
Страх.
Гнев.
Стыд.
Вина.
Тревога.
Апатия.
Уныние.
Изоляция.
Бессилие.
Контакт.
Тепло.
Чувство.
Живость.
Ясность.
Точность.
Присутствие.
Тишина.
Покой.
Если выбор сделан,
твоё место здесь:
мэверик
Входи осторожно.
Кислород
зашкаливает.
ㅤ
🤮8
Открыли регистрацию на E-CUP 2026 Students 🎓
В этом сезоне — только для студентов. Будет интересно тем, кто изучает ML / DS / big data / аналитику данных.
Сможете ускорить модель по поиску дубликатов на 20%? Получится создать классификатор для модерации товаров? Сумеете предсказать поведение покупателя?
Как минимум — попробуете и получите фидбэк от тех, кто делает это в Ozon Tech каждый день. Как максимум — разделите призовой фонд в 7 200 000 ₽ в торжественной атмосфере конференции E-CODE.
Нетривиальные задачи, нетворк с ведущими специалистами индустрии, кастомный мерч и шанс масштабно усилить портфолио — это про E-CUP 2026 Students.
Больше подробностей и регистрация ↩️
В этом сезоне — только для студентов. Будет интересно тем, кто изучает ML / DS / big data / аналитику данных.
Сможете ускорить модель по поиску дубликатов на 20%? Получится создать классификатор для модерации товаров? Сумеете предсказать поведение покупателя?
Как минимум — попробуете и получите фидбэк от тех, кто делает это в Ozon Tech каждый день. Как максимум — разделите призовой фонд в 7 200 000 ₽ в торжественной атмосфере конференции E-CODE.
Нетривиальные задачи, нетворк с ведущими специалистами индустрии, кастомный мерч и шанс масштабно усилить портфолио — это про E-CUP 2026 Students.
Больше подробностей и регистрация ↩️
🔥3❤2
Hybridmethod — это легкий декоратор, который упрощает использование синхронных и асинхронных методов в одном классе.
Он позволяет объявлять метод, который может быть вызван как в обычном, так и в asyns-контексте, исключая дублирование кода.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤4👍3🔥1