Присоединяйтесь к нашему каналу и погрузитесь в мир для Python-разработчика Связь: @devmangx РКН: https://clck.ru/3GMMF6
Эта фича в VS Code — суперсила, о которой 90% разработчиков не знают
Называется Forward Port и позволяет пробросить локальный порт в интернет и поделиться своим проектом снаружи. 🫥
👉 @PythonPortal
Ultimate Python — практичный гайд по чистому Python
Мини‑модули по ключевым темам Python, от переменных до многопоточности. Учишься по шагам.
Никаких сторонних библиотек — тык
👉 @PythonPortal
uv — это пакетный менеджер для Python, написанный на Rust и созданный с прицелом на скорость и надёжность.
uv — невероятно быстрый
- Создание виртуальных окружений с помощью uv примерно в 80 раз быстрее, чем через python -m venv.
- Установка пакетов происходит в 4–12 раз быстрее без кэша и примерно в 100 раз быстрее с кэшированием.
Он заменяет не только pip
, но и такие инструменты, как pip-tools, virtualenv, pipx, poetry
и pyenv
— всё в виде одного standalone-бинарника.
Вот шпаргалка по uv для Python-разработчиков ♟
🔹uv init <project-name>
— Инициализирует новый Python-проект с дефолтной структурой.
🔹uv venv
— Создаёт новое виртуальное окружение в текущем проекте.
🔹uv add <package-name>
— Добавляет пакет в зависимости проекта.
🔹uv pip install -r requirements.txt
— Устанавливает все зависимости из файла requirements.txt.
🔹uv remove <package-name>
— Удаляет указанный пакет из зависимостей проекта.
🔹uv run script.py
— Запускает Python-скрипт или команду внутри окружения проекта.
🔹uv sync
— Синхронизирует зависимости проекта в соответствии с uv.lock.
🔹uv tool install <tool-name>
— Устанавливает Python CLI-инструмент как глобальный тул.
Пример: uv tool install ruff
🔹uvx <tool> [args]
— Запускает CLI-инструмент во временном окружении без установки.
Пример: uvx black script.py
👉 @PythonPortal
Это библия для разработчиков: вся нужная документация в одном месте
✓ Языки программирования, библиотеки, фреймворки
✓ Поиск сразу по всем источникам
✓ Всегда актуальные версии
Дока обновляется каждый день. Открывай в одной вкладке хоть Python, Postgres и Bash
Никакой рекламы, всё супербыстро → devdocs․io 😱
👉 @PythonPortal
Text-to-Speech нового уровня
Chatterbox — первый open-source TTS, готовый к продакшену.
➣ Задержки менее 200 мс
➣ Синтеза речи нулевого выстрела (zero-shot) на уровне SoTA
➣ Управления эмоциями и выразительностью
Полностью open-source 😱
👉 @PythonPortal
Практический Python от Дэвида Бизли (один из самых уважаемых экспертов по Python, автор книги "Python Essential Reference")
Курс учит не просто писать код, а думать как интерпретатор, избегая фреймворков. Всё на голом Python, от функций до генераторов и итераторов
Материал подаётся плотно, с минимальной теорией и сразу с практикой.
Курс доступен онлайн, без регистрации и бесплатно, включая слайды, заметки и упражнения 🤔
Ссылка на курс: тык
👉 @PythonPortal
Всё, что нужно для трассировки LLM-приложений это Python-декоратор (open-source).
Большинство метрик для LLM оценивают приложение как чёрный ящик от начала до конца.
Но LLM-приложения требуют оценки и трассировки на уровне компонентов, ведь ошибка может быть где угодно: в ретривере, вызове инструмента или самом LLM.
С помощью deepeval это делается всего в 3 строки кода:
– Используй декоратор @observe
, чтобы трассировать отдельные компоненты (инструменты, ретриверы, генераторы)
– Привязывай метрики к каждому из компонентов
– Получай визуальный разбор — что работает, а что ломается
И всё. Переписывать существующий код не нужно. 😄
Пример есть выше для RAG-приложения.
Deepeval — полностью open-source, уже 8500+ звёзд на GitHub. Можно легко задеплоить у себя. Все данные останутся под твоим контролем.
👉 @PythonPortal
Преобразование систем счисления в Python с использованием встроенных функций
🔹Из десятичной в двоичную
decimal_number = 10
binary_number = bin(decimal_number)
print(binary_number)
# Вывод: '0b1010'
binary_number = '1010'
decimal_number = int(binary_number, 2)
print(decimal_number)
# Вывод: 10
decimal_number = 10
octal_number = oct(decimal_number)
print(octal_number)
# Вывод: '0o12'
octal_number = '12'
decimal_number = int(octal_number, 8)
print(decimal_number)
# Вывод: 10
decimal_number = 10
hex_number = hex(decimal_number)
print(hex_number)
# Вывод: '0xa'
hex_number = 'a'
decimal_number = int(hex_number, 16)
print(decimal_number)
# Вывод: 10
Многие разработчики на Python считают метод __init__()
конструктором, но на самом деле это не так.
Настоящий конструктор в Python — это метод __new__()
. Давайте разберёмся, как это доказать, на небольшом примере.
Сначала добавим несколько print-вызовов в метод __init__()
, чтобы понять, что происходит при создании экземпляра класса: (2 фото)
Теперь добавим метод __new__()
и посмотрим, вызывается ли __init__()
до или после __new__()
. (3 фото)
Если запустить этот код, станет видно, что первым вызывается именно метод __new__()
Хочу отметить, что в большинстве случаев вам не придётся использовать метод __new__()
в своём коде. На практике он применяется почти исключительно в метапрограммировании, фабричных функциях и при работе с API — по крайней мере, из того, что мне доводилось видеть.
Так что продолжайте спокойно использовать проверенный метод __init__()
— он по-прежнему отлично справляется со своей задачей 😄
👉 @PythonPortal
Совет по Python:
При объединении итерируемых объектов разной длины используй itertools.zip_longest()
вместо zip()
, чтобы все элементы были объединены в пары.zip()
объединяет элементы, пока один из итерируемых не закончится:
>>> list(zip(letters, numbers))
[('a', 1), ('b', 2)]
zip_longest()
продолжает объединение до конца самого длинного итерируемого объекта:>>> list(zip_longest(letters, numbers))
[('a', 1), ('b', 2), ('c', None)]
fillvalue
позволяет указать значение-заполнитель для отсутствующих элементов:>>> list(zip_longest(letters, numbers, fillvalue='N/A'))
[('a', 1), ('b', 2), ('c', 'N/A')]
zip_longest
, когда важно сохранить все данные, даже при разной длине итерируемых объектов 🤵Совет по Python:
Функция locals()
Встроенная функция locals() возвращает словарь, представляющий текущую локальную таблицу символов.
Таблица символов — это структура, в которой Python хранит все имена (переменные, функции, классы и т.д.), доступные в определённой области видимости.
Когда locals()
вызывается внутри функции, она возвращает словарь со всеми локальными переменными, определёнными в рамках этой функции.
В примере переменные z
и x
определены локально внутри функции. Переменная y = 20
является глобальной и не относится к области видимости my_func(). Поэтому locals() внутри my_func
не включает y
👉 @PythonPortal
Использование контекстного менеджера как таймера
Большинство разработчиков ассоциируют контекстные менеджеры (with-выражение) только с работой с файлами. Но на самом деле этот паттерн решает более общую задачу.
Контекстные менеджеры идеально подходят для управления любыми ресурсами, у которых есть чёткий момент начала и завершения. Например:
• File I/O
• Сессии логирования
• Транзакции в базе данных
• Сетевые и БД-соединения
• Замер производительности
• Управление потоками и блокировкамиwith
гарантирует, что инициализация и очистка ресурса будут выполнены автоматически, даже если в блоке возникнет исключение. Это делает код чище и надёжнее.
Вместо того чтобы вручную замерять время до и после блока кода, можно использовать контекстный менеджер — это чистое и питоничное решение.
Обычно контекстный менеджер реализуется как класс с методами __enter__
и __exit__
Но есть более лаконичный способ — использовать декоратор @contextmanager
из модуля contextlib, чтобы писать генераторные менеджеры без лишнего шаблонного кода.
Пример как использовать контекстный менеджер как таймер прикрепил ✌️
👉 @PythonPortal
Это что игра What It Prints?
Да, это онлайн-игра‑головоломка для разработчиков и студентов, где нужно угадать, что выведет код. Простая и увлекательная: показывается фрагмент, а вы должны определить его вывод
Для самопроверки самое то 💯
👉 @PythonPortal
Совет по Python: deque.maxlen
Знаете ли вы, что можно задать максимальную длину списка, используя deque из модуля collections?
Класс deque
(двусторонняя очередь) из модуля collections поддерживает параметр maxlen
, который устанавливает максимальный размер очереди. Когда очередь достигает этого размера, добавление новых элементов автоматически удаляет элементы с противоположного конца, реализуя поведение "первым пришёл — первым ушёл" (FIFO) с ограничением по размеру.
В приведённом примере deque
имеет максимальную длину 3. При добавлении значения 4 удаляется 1, что делает такую структуру идеальной для реализации скользящего окна последних трёх элементов 📖
👉 @PythonPortal
Совет по Pytest:
Используйте пользовательские маркеры pytest
, чтобы добавлять метаданные к тестам.
Это упрощает организацию и запуск определённых групп тестов
В примере на изображении используются два пользовательских маркера:
🔹@pytest.mark.performance
– Применён к тесту для замера производительности test_page_load_time
🔹@pytest.mark.database
– Применён к тестам для работы с базой данных test_database_connection
и test_data_integrity
Мы можем запускать выборочно, например тесты, помеченные маркером @pytest.mark.database
pytest -m database
Экранный рекордер с помощью Python
screen_size = pyautogui.size()
fps = 20
fourcc = cv2.VideoWriter_fourcc(*"XVID")
output_file = "screen_recording_clcoding.mp4"
out = cv2.VideoWriter(output_file, fourcc, fps, (screen_size.width, screen_size.height))
screen_size = pyautogui.size()
— получаем разрешение экрана (ширину и высоту).fps = 20
— задаём частоту кадров (20 кадров в секунду).fourcc
— кодек видео (XVID).output_file
— имя файла для сохранения.cv2.VideoWriter(...)
— создаёт объект, который будет записывать кадры в видеофайл.print("Recording... Press 'q' to stop.")
while True:
screen = pyautogui.screenshot()
frame = np.array(screen)
frame = cv2.cvtColor(frame, cv2.COLOR_RGB2BGR)
out.write(frame)
pyautogui.screenshot()
— делает скриншот всего экрана.np.array(screen)
— переводим скриншот в массив пикселей.cv2.cvtColor(..., cv2.COLOR_RGB2BGR)
— OpenCV использует BGR-порядок, а pyautogui возвращает RGB, нужно преобразовать.out.write(frame)
— сохраняем кадр в видеофайл.if keyboard.is_pressed('q'):
print("Recording stopped.")
break
out.release()
print(f"Video saved to {output_file}")
out.release()
— освобождаем ресурсы и сохраняем файл.3D контурный график на Python
1. Импортируем библиотеки:
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
x = np.linspace(-5, 5, 100)
y = np.linspace(-5, 5, 100)
X, Y = np.meshgrid(x, y)
def f(x, y):
return np.sin(np.sqrt(x**2 + y**2))
Z = f(X, Y)
fig = plt.figure(figsize=(8, 6))
ax = fig.add_subplot(111, projection='3d')
contour = ax.contour3D(X, Y, Z, 50, cmap='viridis')
ax.set_xlabel('X-axis')
ax.set_ylabel('Y-axis')
ax.set_zlabel('Z-axis')
fig.colorbar(contour, ax=ax, label='Z values')
plt.show()
Это одно из самых безумных расширений для VS Code, что я видел за последнее время
GitLantis визуализирует структуру проекта в виде 3D-подводного мира. Да, буквально — ты «плаваешь» по директориям, как по рифам в Атлантике. Атмосферно и безумно красиво 😮
👉 @PythonPortal
Совет по Pytest:
Используйте @pytest.mark.skipif
, чтобы условно пропускать тесты в зависимости от определённых условий — например, платформы, наличия зависимостей или значений переменных окружения
Декоратор @pytest.mark.skipif(...)
указывает Pytest пропустить выполнение теста, если условие истинно.
В примере, тест пропускается, если используется Python версии ниже 3.9, потому что оператор объединения словарей (|) появился только в Python 3.9.
Аргумент reason
сообщает причину пропуска, которая отображается в отчёте Pytest.
👉 @PythonPortal
⭐️ Техножурнал Яндекс 360: рассказываем о технологиях
В Яндекс 360 мы создаём технологии, которые работают в основе более чем 13 сервисов, включая Диск, Почту, Телемост, Мессенджер и другие.
Открывайте Техножурнал, чтобы узнать:
— Как мы балансируем нагрузку в 300k RPS в Яндекс Мессенджере,
— Как подружили MongoDB и PostgreSQL в Диске,
— Какие в команде культура и ценности.
А ещё — как мы внедряли DDD, кто такой Technical Owner, как управляем 650+ шардами PostgreSQL и как подходим к проектированию архитектуры наших сервисов.
⭐️ Всё это — в Техножурнале Яндекс 360.
@yandex360team
Pandas vs PySpark
Если ты работаешь с небольшими данными на ноутбуке или с большими объёмами на кластере — именно Pandas и PySpark лежат в основе современной аналитики данных.
Когда я только начинал, постоянно ловил себя на вопросах: «А как сделать эту операцию из Pandas в PySpark?»
или «Какой эквивалент у этого DataFrame-кода в PySpark?» 😨
Переключаться между ними было непросто — разный синтаксис, разный подход. Поэтому держи простую шпаргалку с командами в лоб-в-лоб, чтобы упростить переход.
Что внутри:
❯ Удобный выбор, фильтрация и сортировка строк
❯ Группировка, агрегации и join’ы без боли
❯ Обработка пропущенных значений
❯ Плавный перенос логики между Pandas и PySpark
Совет: если освоишь обе библиотеки — сможешь уверенно переключаться между небольшими проектами и масштабными пайплайнами.
И не забывай:
«В Pandas ты учишься ремеслу. В PySpark — масштабированию.»
Наткнулся на годный репозиторий для изучения Data Science с Python 😮
Это полный текст книги Python Data Science Handbook в формате Jupyter-ноутбуков — прямо на GitHub
Можно изучать NumPy, Pandas, Matplotlib, Scikit-Learn и другие библиотеки прямо в интерактивном формате. Подойдёт и для новичков, и как шпаргалка для практиков
👉 @PythonPortal
Google представила мощного AI-ассистента для работы в терминале — Gemini CLI
На текущем этапе инструмент фактически доступен бесплатно, работает на базе модели Gemini 2.5 Pro, с такими лимитами:
- До 60 запросов в минуту
- До 1000 запросов в день
Для личного использования этих ограничений более чем достаточно. На фоне подписок по $10–20 в месяц на другие AI-инструменты для разработки — Google действительно щедр. 😮
• Контекст до 1 млн токенов
• Мультимодальность: UI-скетчи, PDF → код
• Автопоиск PR и merge-автоматизация
• Поддержка MCP-протокола
• Встроенный Google Search
👉 @PythonPortal
Хочешь понять, как работает Git — напиши свой.
Линус Торвальдс прославился тем, что написал Git за один день на C, уложившись в 1000 строк — и закоммитил его через Git. Сейчас проект насчитывает >500k строк, но его ядро можно реализовать за одни выходные.
Write Yourself a Git – пошаговое руководство, помогающее создать упрощённую версию Git на Python. Автор показывает, как за ~978 строк кода реализовать ключевые команды Git: init, add, commit, log, checkout, status
и другие — при этом всё остаётся совместимым с настоящим Git
Git кажется сложным, но его ядро на удивление простое. Проект wyag позволяет «разобрать его на атомы» и понять фундаментальные концепции через код 😡
👉 @PythonPortal
Наткнулся на прикольный ресурс для изучения SQL
Это интерактивный тренажёр, который позволяет практиковаться в написании SQL-запросов прямо в браузере.
Подойдёт и новичкам, и тем, кто хочет освежить SELECT, JOIN и другие команды на практике 📝
👉 @PythonPortal
Топ-10 распространённых магических методов в Python__init__(self)
– Инициализация нового объекта__str__(self
) – Строковое представление__repr__(self)
– Представление для отладки__len__(self)
– Длина объекта__getitem__(self, key)
– Доступ к элементу по индексу/ключу__setitem__(self, key, value)
– Установка значения по индексу/ключу__delitem__(self, key)
– Удаление элемента по ключу__eq__(self, other)
– Проверка на равенство__add__(self, other)
– Поведение оператора сложения +
__call__(self, ...)
– Делает экземпляр вызываемым как функция
👉 @PythonPortal
Auto PY to EXE — это open-source инструмент для упаковки Python-проектов в исполняемые файлы, который гораздо проще в использовании, чем pyfuze
Он предоставляет наглядный графический интерфейс: просто выбираешь скрипт, настраиваешь нужные параметры и нажимаешь кнопку запуска —> весь процесс упаковки проходит без необходимости возиться с командной строкой.
Дополнительно можно сохранять часто используемые настройки, отслеживать процесс в реальном времени и просматривать подробные логи. 📖
Инструмент кроссплатформенный, поддерживает Windows, macOS и Linux, а установка через pip максимально простая:
pip install auto-py-to-exe
Это шпаргалка по библиотеке NumPy
Краткое руководство по основным операциям и функциям для работы с массивами в Python. 😄
👉 @PythonPortal
Я только сегодня узнал об этом трюке с GitHub
Просто введите repo.new
в адресной строке браузера — и сразу откроется страница создания нового репозитория на GitHub.
Такой простой способ сэкономить время 🤯
👉 @PythonPortal
Буквально за считанные минуты собери умного чат-бота для своего сайта
Firecrawl только что выкатили Firestarter — полноценную платформу для чат-ботов, которая:
🔸Скрейлит твой сайт
🔸Индексирует контент
🔸Разворачивает чат-интерфейс с поддержкой RAG и API в стиле OpenAI
Полностью open-source - ccылка
Попробуйте: ссылка
👉 @PythonPortal