Python Ninja | Программирование
6.94K subscribers
1.14K photos
106 videos
990 links
Канал для всех кто хочет освоить или прокачать навыки программирования на Python. Присоединяйся, чтобы стать настоящим Python Ninja!

Связь: @sfoninja
Download Telegram
This media is not supported in your browser
VIEW IN TELEGRAM
Unlimited-OCR — это модель на 3 млрд параметров, которая может распарсить целый PDF на 100 страниц за один проход — без разбиения по страницам и без потери контекста.

* контекстное окно 32K, читает весь документ за один проход
+ 93% на стандартных бенчмарках парсинга, на 6 пунктов выше baseline
* уровень ошибок ниже 0,11 после 40-й страницы — там, где все остальные OCR-инструменты начинают разваливаться
* мультиязычность из коробки, локальный запуск через Transformers, Ollama, llama.cpp или Docker
* Textract, Google Vision и Azure Document Intelligence берут от $1,50 до $15 за 1 000 страниц

1,9 млн скачиваний на Hugging Face, и при этом большинство людей о ней даже не слышали.

Она работает прямо на вашем компьютере. Бесплатно. Навсегда.

Ссылка на модель: http://huggingface.co/baidu/Unlimited-OCR

✈️ Python Ninja
Please open Telegram to view this post
VIEW IN TELEGRAM
3
Foundations of Applied Mathematics — это бесплатная серия из четырёх учебников, созданная для программы по прикладной и вычислительной математике в Университете Бригама Янга.

В неё входят четыре тома:
Математический анализ
Алгоритмы, аппроксимация и оптимизация
Неопределённость и данные
Динамика и управление

Серия подходит студентам старших курсов бакалавриата и начальных курсов магистратуры. К ней также прилагаются лабораторные работы на Python и практические задания, поэтому математическая теория связана с численными вычислениями, алгоритмами, анализом данных и научными приложениями.

Особенно мне нравится, что это не только теоретические учебники. Сопутствующие материалы на Python помогают увидеть, как эти концепции применяются к реальным вычислительным задачам.

https://foundations-of-applied-mathematics.github.io

✈️ Python Ninja
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
This media is not supported in your browser
VIEW IN TELEGRAM
На этой неделе я нашёл, пожалуй, лучший оркестратор для ИИ-агентов. Он называется Herdr и по сути представляет собой tmux, который понимает, что делают агенты. 👍

Вы запускаете Claude Code, Codex или OpenCode в отдельных панелях, а боковая панель в реальном времени показывает, какой агент сейчас работает, какой уже закончил и какой заблокирован в ожидании вашего ввода.

Кроме того, терминал можно закрыть, а агенты продолжат работать. То есть поддерживается detach-режим.
Затем можно подключиться обратно по SSH откуда угодно, даже с телефона.

Всё это упаковано в один бинарник на Rust: быстрый, лёгкий, кроссплатформенный и с открытым исходным кодом. Работает в любом терминале, поддерживает настройку и плагины для расширения возможностей

https://herdr.dev/

✈️ Python Ninja
Please open Telegram to view this post
VIEW IN TELEGRAM
2
Совет по Python

Если нужно создать поле, которое не должно попадать в сгенерированный __init__ используй
field(init=False)

Это особенно удобно для вычисляемых атрибутов

from dataclasses import dataclass, field

@dataclass
class Rectangle:
width: int
height: int
area: int = field(init=False)

def __post_init__(self):
self.area = self.width * self.height


Поле area не передаётся при создании объекта и всегда вычисляется автоматически

✈️ Python Ninja
Please open Telegram to view this post
VIEW IN TELEGRAM
3
Чтобы превратить вызовы LLM в понятные и компонуемые workflows, не нужен огромный фреймворк.

PocketFlow — минималистичный Python-фреймворк для разработчиков, которые создают агентов, RAG-пайплайны и другие LLM-приложения.

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

Ключевые возможности:

• Графовые flows — можно объединять узлы в цепочки, создавать ветвления по действиям, циклы и вложенные flows.
• Узлы из трёх этапов — подготовка, выполнение и постобработка разделены и работают с общим состоянием.
• Настройка повторных попыток — можно задать количество ретраев, задержки между ними и fallback-поведение при ошибках выполнения.
• Batch- и async-режимы — обработка списков элементов, повторный запуск flows с параметрами и параллельное выполнение асинхронных batch-задач.
• Практический cookbook — примеры агентов, RAG, workflows, стриминга и приложений с human-in-the-loop.

Проект с открытым исходным кодом и распространяется по лицензии MIT.

✈️ Python Ninja
Please open Telegram to view this post
VIEW IN TELEGRAM
2
Этот проект представляет собой полный курс по Python — от нулевого уровня до backend-разработки, который создавался в прямом эфире на Twitch.

Покрывает основы Python, продвинутые темы и разработку backend-приложений.
Включает создание REST API с аутентификацией и интеграцией с базой данных.
Весь код организован по директориям: Basic, Intermediate и Backend.
Видео-уроки содержат таймкоды для каждой темы.

✈️ Python Ninja
Please open Telegram to view this post
VIEW IN TELEGRAM
3
Готовимся к собеседованию позиции Middle и Senior

Отличный комплект для подготовки к техническим интервью по Python.

Первый материал - большой обзор на Хабре с вопросами, которые реально задаются на собеседованиях: Python, алгоритмы, HTTP, Git, SQL, Django, Flask, многопоточность, тестирование и др.

Второй ресурс: GitHub-репозиторий с подробными ответами и объяснениями по большинству этих тем. Вместе они станут отличной базой для подготовки к интервью уровня Middle и Senior.

Python Ninja
Please open Telegram to view this post
VIEW IN TELEGRAM
2
Бесплатный гайд по GitHub новичкам

Освоить GitHub - один из первых шагов в карьере разработчика. В официальном руководстве собраны ключевые темы: от создания репозитория до командной работы через Pull Request.

Хороший старт для студентов, джунов и всех, кто хочет программировать ❤️❤️

☝️ Ссылка источник

Python Ninja
Please open Telegram to view this post
VIEW IN TELEGRAM
2
Бесплатная книга «Python for Data Analysis третье издание»

Современный и практичный гид по работе с данными на Python, идеально подходящий для аналитиков, которые только начинают свой путь, и разработчиков, стремящихся освоить науку о данных через код

Книга включает живые примеры, реальные кейсы и достаточное внимание к практическим нюансам работы с данными. Материалы и примеры доступны на GitHub

Ставь лайкос и сохраняй в закладки ❤️

☝️ Ссылка источник

✈️ Python Ninja
Please open Telegram to view this post
VIEW IN TELEGRAM
2
Изменяемые аргументы и метод extend

Что выведет код? ☕️

✈️ Python Ninja
Please open Telegram to view this post
VIEW IN TELEGRAM
1
Варианты
Anonymous Quiz
21%
A
27%
B
35%
C
17%
D
Python шпаргалка: работа со списками

Полезная подборка примеров: от базовых методов (append, pop, sort) до встроенных функций (sum, max, enumerate, map) с пояснениями

Отличный справочник если часто работаешь со списками и хочется быстро вспомнить нужный приём

Ставь лайк если полезно ❤️

✈️ Python Ninja
Please open Telegram to view this post
VIEW IN TELEGRAM
5
Нашли отличный репозиторий вката в Python и машинное обучение с нуля

На GitHub собрана масштабная база материалов по Python: от базового синтаксиса до анализа данных и ML-проектов. Тут есть всё: объяснения основ, куча примеров, задачки и даже мини-проекты по машинному обучению

Отличный вариант самостоятельного обучения, прокачки навыков и первого знакомства с ML-инструментами

Лайк на базу 👦

☝️ Ссылка источник

✈️ Python Ninja
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
Если вы новичок в Python остановитесь и внимательно посмотрите 👇

НИКОГДА не изменяйте список во время итерации по нему

Когда вы изменяете список в процессе обхода, итератор «теряется». Он не понимает, что список изменился прямо во время его работы.

Например, этот код работает неправильно:
items = [1, 2, 2, 3, 4]
for item in items:
if item == 2:
items.remove(item)

print(items)
# Output: [1, 2, 3, 4]


Мы используем метод remove(), чтобы удалить все двойки из списка. Но, как видно из результата, одна 2 всё равно остаётся.

Почему так происходит? Когда вы удаляете элемент из списка, все элементы сдвигаются влево. Но цикл продолжает идти вперёд по индексам. В итоге происходит следующее:
первая 2 находится и удаляется

вторая 2 сдвигается на её место

цикл переходит к следующему индексу

и эта 2 просто пропускается


Правильный способ итерироваться по копии списка:
for item in items[:]:
if item == 2:
items.remove(item)

print(items)
# Output: [1, 3, 4]


Когда вы проходите по копии (поверхностной копии), индексы исходного списка не «сбиваются».

🔥 Ещё лучше использовать генератор списка (list comprehension):
items = [x for x in items if x != 2]


👑 Запомните: никогда не изменяйте список (или любую другую коллекцию) во время прямой итерации по нему. Итератор не умеет корректно работать со структурными изменениями:

он может пропускать элементы

обрабатывать один и тот же элемент дважды

или даже вызывать ошибку RuntimeError (например, в словарях)


Это плохая практика

✈️ Python Ninja
Please open Telegram to view this post
VIEW IN TELEGRAM
3
Подборка ресурсов по MLOps для тех, кто хочет разобраться, как ML-системы доводят до production.

https://github.com/visenger/awesome-mlops

👉 @PythonPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
2
Совет по Python: Использование словаря в качестве оператора match-switch

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

В приведённом примере словарь switch_dict сопоставляет дни недели с задачами. Если день недели существует в словаре как ключ, возвращается соответствующая задача. Если день не найден, используется значение по умолчанию "invalid option", переданное в метод get(). Такой подход особенно полезен, когда у вас ограниченное количество вариантов и нужно обрабатывать их эффективно

✈️ Python Ninja
Please open Telegram to view this post
VIEW IN TELEGRAM
3
SQL в Python: Сравнительное руководство по работе с данными

Знаешь SQL и хочешь понять, как делать то же самое в Pandas? Это руководство покажет как привычные SQL-запросы выглядят в мире Python 👊

✈️ Python Ninja
Please open Telegram to view this post
VIEW IN TELEGRAM
2
Полезная тулза «Port Kill» приложение для быстрого управления процессами

Помогает разработчикам быстро находить и завершать процессы, мешающие работе на нужных портах

Автоматически определяет активные процессы ( Docker), показывает статус цветными индикаторами и позволяет завершать их выборочно или все сразу

Сохраняем пригодится

☝️ Ссылка источник

✈️ Python Ninja
Please open Telegram to view this post
VIEW IN TELEGRAM
3👍2
Упростить логирование в Python можно с помощью Loguru 🪵

Стандартный модуль logging умеет почти всё, но даже базовая настройка часто требует handlers, format strings и дополнительного конфигурационного кода.

Loguru делает логирование по ощущениям почти таким же простым, как print(), при этом поддерживает:
timestamps;
уровни логов;
запись в файлы;
rotation;
retention;
подробный вывод исключений.

В статье сравниваются оба подхода и показывается, как Loguru позволяет сделать типичные задачи логирования короче и читабельнее.

✈️ Python Ninja
Please open Telegram to view this post
VIEW IN TELEGRAM
3
Фатальная ошибка в pandas

Такой код не фильтрует значения NULL или None:
df[df['user_id'] != None]


В pandas пропущенные значения представлены как NaN или None, но оператор != работает с ними не так, как многие ожидают.

Поэтому такой фильтр не удаляет все пропущенные значения.

Вместо этого используйте:
df[df['user_id'].notna()]


или
df.dropna(subset=['user_id'])


Для проверки пропущенных значений в pandas всегда используйте методы isna() и notna(), а не операторы == или !=.

✈️ Python Ninja
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
В Python обычный zip() может незаметно «съесть» часть данных, если списки разной длины. 🐍

Например:
x = [1, 2, 3, 4, 5]
y = ['a', 'b', 'c']

list(zip(x, y))
# [(1, 'a'), (2, 'b'), (3, 'c')]


zip()
останавливается, как только заканчивается самый короткий список — поэтому 4 и 5 просто не попадут в результат.

Если нужно сохранить все элементы, есть itertools.zip_longest():
import itertools

list(itertools.zip_longest(x, y))
# [(1, 'a'), (2, 'b'), (3, 'c'), (4, None), (5, None)]


Недостающие значения он по умолчанию заполняет None.

Небольшая штука, но полезно помнить, когда объединяете данные из источников разной длины.

✈️ Python Ninja
Please open Telegram to view this post
VIEW IN TELEGRAM
3👍1