Python/ django
65.1K subscribers
2.21K photos
110 videos
48 files
2.94K links
по всем вопросам @haarrp

@itchannels_telegram - 🔥 все ит-каналы

@ai_machinelearning_big_data -ML

@ArtificialIntelligencedl -AI

@datascienceiot - 📚

@pythonlbooks

РКН: clck.ru/3FmxmM
Download Telegram
🖥 PlutoPrint — быстрое создание PDF и PNG из HTML с помощью Python

PlutoPrint — это лёгкая и удобная библиотека на Python для генерации качественных PDF и изображений напрямую из HTML или XML. Она основана на мощном рендеринг-движке PlutoBook, что делает её идеальной для отчетов, счетов, билетов и визуализаций.

Основные возможности

Поддержка PDF и PNG – можно создавать как статичные изображения, так и печатные документы из
Простота установки и использования — установка через pip install plutoprint; пример для командной строки:

plutoprint input.html output.pdf --size=A4

🟠 Github

@pythonl
Please open Telegram to view this post
VIEW IN TELEGRAM
1👍1711🔥2
This media is not supported in your browser
VIEW IN TELEGRAM
🖥 Что такое псевдослучайность в Python

Когда мы используем модуль random, числа выглядят случайными, но на самом деле они вычисляются по алгоритму. Поэтому такие числа называют псевдослучайными.

Главное:
- Если задать одинаковый seed (зерно), генератор выдаст одинаковую последовательность. Это удобно для тестов и экспериментов — результат можно воспроизвести.
- Алгоритм по умолчанию — Mersenne Twister. Он быстрый и подходит для моделирования, но не годится для безопасности.
- Для генерации паролей, токенов и других защищённых данных нужно использовать модуль secrets, который делает случайность криптографически стойкой.

Просто правило:
- Для экспериментов → random с фиксированным seed.
- Для безопасности → secrets.



Пример работы seed
import random

random.seed(42)
print([random.random() for _ in range(3)])

random.seed(42)
print([random.random() for _ in range(3)]) те же числа

Криптографически безопасные значения
import secrets
print(secrets.token_hex(8))
print(secrets.randbelow(10))
Please open Telegram to view this post
VIEW IN TELEGRAM
23👍15🤩5🔥3
Отличный курс для тех, кто хочет разобраться в нейронках с нуля от Андрея Карпати (OpenAI/Tesla).

Внутри бесплатная серия лекций на YouTube (и репа на GitHub), где ты с нуля учишься собирать нейронки. Всё максимально hands-on:

Автор не просто рассказывает теорию, а пишет код вместе с тобой — от самых азов до тренировки сетей.

https://github.com/karpathy/nn-zero-to-hero/

@pythonl
24👍10🤩3🔥1
🖥 rest-filters — фильтрационный бэкенд для Django REST framework

Что это:
Новый инструмент для фильтрации в DRF, который расширяет возможности стандартного django-filter.

Особенности
- Использует serializer-поля для разбора и валидации (без Django-форм и виджетов)
- Поддержка группировки фильтров для гибкой логики
- Constraint system — проверка взаимозависимостей между параметрами
- Вложенные фильтры (nested filters) для работы со сложными структурами


Последний релиз — v0.6.0 (21 августа 2025)
- Возможность указывать группу по умолчанию для всего FilterSet (в том числе глобально)
- Поддержка subgroups для более сложных связей между фильтрами
- Новый метод FilterSet.get_combinator() для динамического выбора способа объединения фильтров
- ⚠️ Breaking change: теперь Entry нельзя создавать без указания группы

Почему стоит попробовать
Если стандартные фильтры Django REST кажутся ограниченными, rest-filters даёт:
- фильтрацию через сериализаторы,
- сложные сценарии с группировками и вложенностью,
- гибкость и расширяемость.

🔗 Репозиторий: https://github.com/realsuayip/rest-filters

@pythonl
Please open Telegram to view this post
VIEW IN TELEGRAM
11👍6🔥2
This media is not supported in your browser
VIEW IN TELEGRAM
🖥 Python trick: группировка с помощью itertools.groupby

Иногда при работе с коллекциями в пайтон нужно быстро сгруппировать данные по ключу и при этом не писать громоздкий цикл с проверками. В таких случаях можно использовать модуль итэртулз и функцию группбай. Она позволяет превратить список в словарь с удобной структурой, где каждый ключ сразу содержит все связанные элементы. Это сильно экономит строки кода и делает его чище.



from itertools import groupby
from operator import itemgetter

data = [
{"category": "A", "value": 10},
{"category": "B", "value": 20},
{"category": "A", "value": 30},
{"category": "B", "value": 40},
]

сортировка обязательна перед groupby
data.sort(key=itemgetter("category"))

grouped = {
key: list(group) for key, group in groupby(data, key=itemgetter("category"))
}

print(grouped)
Please open Telegram to view this post
VIEW IN TELEGRAM
13👍9🔥3
This media is not supported in your browser
VIEW IN TELEGRAM
🔥 Совет по Python: неожиданное поведение с изменяемыми аргументами по умолчанию

Если в функции задать аргумент по умолчанию как list или dict, то этот объект создаётся один раз — при определении функции.

Из-за этого все вызовы будут делить один и тот же объект, что часто приводит к багам.

Правильный способ — использовать `None` и создавать новый объект внутри функции.


def bad_append(x, data=[]):
data.append(x)
return data

print(bad_append(1)) # [1]
print(bad_append(2)) # [1, 2] <-- неожиданно!


def good_append(x, data=None):
if data is None:
data = []
data.append(x)
return data

print(good_append(1)) # [1]
print(good_append(2)) # [2]


Используйте этот приём, чтобы не попасться на скрытые баги с аргументами по умолчанию.
19👍12🔥5😱2
🎙️ VibeVoice: Инновационная модель TTS для длинных разговоров

VibeVoice — это передовая система синтеза речи, способная генерировать выразительное аудио для длительных разговоров, включая подкасты. Она решает проблемы традиционных TTS-систем, обеспечивая высокую согласованность голосов и естественное взаимодействие между несколькими спикерами.

🚀 Основные моменты:
- Синтезирует речь до 90 минут с 4 различными спикерами.
- Использует токенизаторы непрерывной речи для повышения эффективности.
- Поддерживает высокое качество звука при низкой частоте кадров.
- Применяет диффузионные модели для понимания контекста и потока диалога.

📌 GitHub: https://github.com/microsoft/VibeVoice

@pythonl
22👍6🔥5
This media is not supported in your browser
VIEW IN TELEGRAM
⚡️ Hexora — статический анализ Python-скриптов на вредоносные паттерны

Что это:
- Ищет опасные конструкции в Python-коде: чтение буфера обмена, exec/eval (включая обфускации), подозрительные импорты (pickle, ctypes, marshal), загрузку бинарей, длинные base64/hex-строки и т. п.
- Полезен для аудита зависимостей (supply chain), проверки скриптов из Pastebin/GitHub, triage после инцидентов и ревью пакетов из PyPI.

Быстрый старт:

pip install hexora # или: uv tool install hexora
hexora --help

# Проверить одиночный файл
hexora audit path/to/script.py

# Проверить каталог (с удобным выводом)
hexora audit --output-format terminal ./resources/test/

# Аудит пакетов из venv (и фильтрация шумных правил)
hexora audit \
--exclude HX5020,HX5030,HX5040,HX5050,HX5060 \
--min-confidence high \
.venv/lib/python3.11/site-packages/


🔗Github
13👍10🔥4
⌨️ Как вырасти до Мидла или Синьора в два раза быстрее?

👨‍💻Просто хорошо работать работу не достаточно. Ты делаешь то, что нужно компании, а не то, что повысит твой грейд

Лучший способ вырасти — это персональный план развития от Senior-инженера из БигТеха.

Вот как все работает:
1️⃣ Мок-интервью 1-на-1: Час реалистичного собеса с Senior-инженером из Иннотеха, Сбера или другого бигтеха
2️⃣ Честный фидбек: созвонимся и расскажем твои точки роста, оценим грейд и потенциальный уровень зарплаты
3️⃣Персональный план развития: не просто «учите алгосы», а роадмап с конкретными темами, который приведет тебя к желаемому грейду или офферу

Мы в ШОРТКАТ провели уже почти 1000 таких мок-интервью и получили оценку 4.9/5, поэтому знаем о чем говорим.

📈 Да, и все это за 900 рублей. Почему так дешево?
Мы хотим, чтобы у каждого была возможность проверить в деле наш сервис, а потом уже доверить нам свое развитие.

Переходи в нашего бота и забирай свой мок за 900 рублей →
@shortcut_py_bot

Реклама.
О рекламодателе.
Please open Telegram to view this post
VIEW IN TELEGRAM
10😁6
👩‍💻 Vicinity — легковесное хранилище векторов с поддержкой гибких бэкендов для поиска ближайших соседей!

🌟 Он предоставляет простой и интуитивно понятный интерфейс для выполнения поиска ближайших соседей, поддерживая различные бэкенды и методы оценки. Основная цель Vicinity — унифицировать взаимодействие с различными методами поиска ближайших соседей, устраняя необходимость изучения отдельных интерфейсов для каждого из них.

🌟 Ключевые особенности Vicinity включают минимальные зависимости, высокую производительность, поддержку динамического обновления данных (вставка и удаление элементов), сериализацию для сохранения и загрузки хранилищ векторов, а также простоту использования. Поддерживаемые бэкенды включают BASIC, HNSW, FAISS, ANNOY, PyNNDescent и другие, каждый из которых предлагает свои параметры настройки для оптимизации поиска.

🔐 Лицензия: MIT

🖥 Github

@pythonl
Please open Telegram to view this post
VIEW IN TELEGRAM
15🔥4👍2
🆕 PDF Arranger — лёгкий и удобный инструмент для работы с PDF.

Возможности:
- Объединение и разделение файлов
- Поворот и обрезка страниц
- Перестановка и удаление страниц
- Интуитивный drag-and-drop интерфейс

💻 Доступен для Linux, Windows (включая портативную версию) и BSD.
Полностью опенсорс (GPL-3.0).

Идеален, если нужно быстро подготовить PDF к печати или презентации — без сложных настроек.

📌 GitHub

#PDF #opensource #Linux #devtools

@pythonl
Please open Telegram to view this post
VIEW IN TELEGRAM
10🔥6👍5
This media is not supported in your browser
VIEW IN TELEGRAM
🖥 Полезный совет по ускорению Python-кода

Многие считают, что list comprehension всегда оптимален. Но при больших объёмах данных связка map + filter может быть быстрее: она выполняется на уровне C и не создаёт лишних промежуточных структур.

Когда нужно одновременно фильтровать и преобразовывать элементы, map + filter часто выигрывает по скорости.


def transform(x):
return x * x

data = range(10_000_000)

# Медленнее: создаём лишние промежуточные объекты
res1 = [transform(x) for x in data if x % 2 == 0]

# Быстрее: map и filter не создают лишних списков
res2 = list(map(transform, filter(lambda x: x % 2 == 0, data)))

print(res1[:5], res2[:5])


@pythonl
Please open Telegram to view this post
VIEW IN TELEGRAM
👍21🔥105😁3