📊 Deptry — детектор проблем с зависимостями в Python. Этот инструмент сканирует проект на расхождения между импортами в коде и задекларированными зависимостями. Он работает с Poetry, pip и PDM, находя три типа проблем: неиспользуемые пакеты, отсутствующие зависимости и модули, ошибочно помеченные как dev-зависимости.
Инструмент анализирует не только requirements.txt, но и динамические импорты черезависимостями что снижает количество ложных срабатываний. Для настройки можно использовать как CLI-аргументы, так и секцию [tool.deptry] в� Deptry — детекто
🤖 GitHub (https://github.com/fpgmaas/deptry)
@Python_Community_ru
Инструмент анализирует не только requirements.txt, но и динамические импорты черезависимостями что снижает количество ложных срабатываний. Для настройки можно использовать как CLI-аргументы, так и секцию [tool.deptry] в� Deptry — детекто
🤖 GitHub (https://github.com/fpgmaas/deptry)
@Python_Community_ru
👍1
🖥 Как написать худший возможный Python-код
Иногда проще показать, как не надо, чем объяснять, как надо.
Вот список «правил», которые помогут вам гарантированно испортить любой Python-проект.
1. 🔒 Используйте непонятные имена переменных
Называйте переменные x, y, a, thing. Абстракция — залог путаницы.
def f(x, y, z=None):
a = x * 2
b = y + a if z else y - a
c = [i for i in range(a) if i % 2]
return sum(c) + b
2.🧠 Пихайте максимум логики в одну строку
Сложные тернарные выражения и вложенные list comprehension — всё в одной строке.
result = [x if x > 0 else (y if y < 0 else z) for x in data if x or y and not z]
3.⚠️ Используйте eval() и exec()
Это медленно, небезопасно и глупо — но зато эффектно.
eval("d['" + key + "']")
4.🔁 Переиспользуйте переменные с разными типами
Пусть одна переменная будет и строкой, и числом, и списком — динамическая типизация же!
value = "42"
value = int(value)
value = [value] * value
5.🌍 Используйте глобальные переменные
Изменяйте состояние приложения откуда угодно. Особенно изнутри функций.
counter = 0
def increment():
global counter
counter += 1
6.🔮 Используйте магические числа и строки
Без пояснений. Пусть коллеги гадают, почему именно 42 или "xyz".
if user.role == "xyz" and user.level > 42:
access_granted()
7.📏 Игнорируйте стиль и отступы
Никаких PEP8, никаких правил. Пиши, как хочешь.
def foo():print("start")
if True:
print("yes")
else:
print("no")
8.🧱 Копируйте код из Stack Overflow, не вникая
Ctrl+C — это тоже разработка.
def complex_logic(x):
return (lambda y: (lambda z: z**2)(y + 1))(x)
9.🧩 Придумывайте абстракции без надобности
Вместо простой функции — классы, фабрики и стратегии.
class HandlerFactory:
def get_handler(self):
class Handler:
def handle(self, x): return x
return Handler()
10. 💤 Добавляйте мёртвый код
Никогда не удаляй — вдруг пригодится. И пусть он грузится в каждый запуск.
def legacy_feature():
print("This feature is deprecated")
return
# нигде не вызывается
11.🔀 Не пишите документацию
Комментарии только мешают. Кто захочет — разберётся.
def a(x): return x+1
12.🧪 Пиши без тестов
Если код работает — зачем его проверять?
# Просто запускай и смотри глазами
process_user(data)
13. 🤖 Не используй AI и автодополнение
Только ручной кодинг, без подсказок. Ошибки — путь мастера.
🧠 Заключение
Все эти советы — примеры того, как не стоит писать код.
Если вы узнали себя — пора остановиться. Ведь Python задуман как язык, где важна читаемость, простота и явность.
"Beautiful is better than ugly.
Explicit is better than implicit.
Readability counts."
— The Zen of Python
@Python_Community_ru
Иногда проще показать, как не надо, чем объяснять, как надо.
Вот список «правил», которые помогут вам гарантированно испортить любой Python-проект.
1. 🔒 Используйте непонятные имена переменных
Называйте переменные x, y, a, thing. Абстракция — залог путаницы.
def f(x, y, z=None):
a = x * 2
b = y + a if z else y - a
c = [i for i in range(a) if i % 2]
return sum(c) + b
2.🧠 Пихайте максимум логики в одну строку
Сложные тернарные выражения и вложенные list comprehension — всё в одной строке.
result = [x if x > 0 else (y if y < 0 else z) for x in data if x or y and not z]
3.⚠️ Используйте eval() и exec()
Это медленно, небезопасно и глупо — но зато эффектно.
eval("d['" + key + "']")
4.🔁 Переиспользуйте переменные с разными типами
Пусть одна переменная будет и строкой, и числом, и списком — динамическая типизация же!
value = "42"
value = int(value)
value = [value] * value
5.🌍 Используйте глобальные переменные
Изменяйте состояние приложения откуда угодно. Особенно изнутри функций.
counter = 0
def increment():
global counter
counter += 1
6.🔮 Используйте магические числа и строки
Без пояснений. Пусть коллеги гадают, почему именно 42 или "xyz".
if user.role == "xyz" and user.level > 42:
access_granted()
7.📏 Игнорируйте стиль и отступы
Никаких PEP8, никаких правил. Пиши, как хочешь.
def foo():print("start")
if True:
print("yes")
else:
print("no")
8.🧱 Копируйте код из Stack Overflow, не вникая
Ctrl+C — это тоже разработка.
def complex_logic(x):
return (lambda y: (lambda z: z**2)(y + 1))(x)
9.🧩 Придумывайте абстракции без надобности
Вместо простой функции — классы, фабрики и стратегии.
class HandlerFactory:
def get_handler(self):
class Handler:
def handle(self, x): return x
return Handler()
10. 💤 Добавляйте мёртвый код
Никогда не удаляй — вдруг пригодится. И пусть он грузится в каждый запуск.
def legacy_feature():
print("This feature is deprecated")
return
# нигде не вызывается
11.🔀 Не пишите документацию
Комментарии только мешают. Кто захочет — разберётся.
def a(x): return x+1
12.🧪 Пиши без тестов
Если код работает — зачем его проверять?
# Просто запускай и смотри глазами
process_user(data)
13. 🤖 Не используй AI и автодополнение
Только ручной кодинг, без подсказок. Ошибки — путь мастера.
🧠 Заключение
Все эти советы — примеры того, как не стоит писать код.
Если вы узнали себя — пора остановиться. Ведь Python задуман как язык, где важна читаемость, простота и явность.
"Beautiful is better than ugly.
Explicit is better than implicit.
Readability counts."
— The Zen of Python
@Python_Community_ru
🐍 Python-задача: что выведет этот код с вложенными генераторами?
gen = (x for x in range(3))
def wrap(g):
return (x * 2 for x in g)
gen2 = wrap(gen)
print(list(gen))
print(list(gen2))
🔍 Варианты:
• a) [0, 1, 2], [0, 2, 4]
• b) [0, 1, 2], []
• c) [], [0, 2, 4]
• d) [0, 1, 2], Ошибка
💡 Разбор:
- `gen = (x for x in range(3))` — генератор 0, 1, 2
- `wrap(gen)` — создаёт **новый генератор**, который берёт значения из `gen` и умножает на 2
Но генераторы **исчерпаемы**: после первого полного прохода `list(gen)` → `gen` становится пустым
Значит:
- `list(gen)` → `[0, 1, 2]`
- `gen2 = wrap(gen)` теперь ссылается на **пустой** `gen`
- `list(gen2)` → `[]`
✅ **Правильный ответ: b) `[0, 1, 2]`, `[]`**
🧠 **Вывод:** если оборачиваешь генератор — не "прожигай" его до передачи дальше. Генераторы нельзя перезапустить или "перемотать".
🛠️ Совет: если данные нужны повторно — сохрани их в список:
```python
data = list(gen)
```
или используй itertools.tee для разветвления итератора.
@Python_Community_ru
gen = (x for x in range(3))
def wrap(g):
return (x * 2 for x in g)
gen2 = wrap(gen)
print(list(gen))
print(list(gen2))
🔍 Варианты:
• a) [0, 1, 2], [0, 2, 4]
• b) [0, 1, 2], []
• c) [], [0, 2, 4]
• d) [0, 1, 2], Ошибка
💡 Разбор:
- `gen = (x for x in range(3))` — генератор 0, 1, 2
- `wrap(gen)` — создаёт **новый генератор**, который берёт значения из `gen` и умножает на 2
Но генераторы **исчерпаемы**: после первого полного прохода `list(gen)` → `gen` становится пустым
Значит:
- `list(gen)` → `[0, 1, 2]`
- `gen2 = wrap(gen)` теперь ссылается на **пустой** `gen`
- `list(gen2)` → `[]`
✅ **Правильный ответ: b) `[0, 1, 2]`, `[]`**
🧠 **Вывод:** если оборачиваешь генератор — не "прожигай" его до передачи дальше. Генераторы нельзя перезапустить или "перемотать".
🛠️ Совет: если данные нужны повторно — сохрани их в список:
```python
data = list(gen)
```
или используй itertools.tee для разветвления итератора.
@Python_Community_ru
This media is not supported in your browser
VIEW IN TELEGRAM
🌟 alphaXiv —выпустили расширение для хрома
alphaXiv упрощает работу с научными статьями (arXiv, bioRxiv, PDF):
● чат с ИИ прямо в документе: выделение текста открывает диалог
● ссылки на другие статье через “@” для быстрого вызова статей
● позволяет генерировать блог одним кликом: иллюстрации к статьям, ключевые идеи, перевод
● закладки и автоматические BibTeX-цитаты для хранения и ссылок
https://chromewebstore.google.com/detail/alphaxiv-understand-resea/liihfcjialakefgidmaadhajjikbjjab
@Python_Community_ru
alphaXiv упрощает работу с научными статьями (arXiv, bioRxiv, PDF):
● чат с ИИ прямо в документе: выделение текста открывает диалог
● ссылки на другие статье через “@” для быстрого вызова статей
● позволяет генерировать блог одним кликом: иллюстрации к статьям, ключевые идеи, перевод
● закладки и автоматические BibTeX-цитаты для хранения и ссылок
https://chromewebstore.google.com/detail/alphaxiv-understand-resea/liihfcjialakefgidmaadhajjikbjjab
@Python_Community_ru
📦 InvenTree — умная система учета для мастерских и инженерных проектов. Этот open-source инструмент — достойная замена Excel, которая поможет вам перестать страдать от перегруженных корпоративных систем.
Инструмент предлагает продуманный баланс между простотой и функциональностью: отслеживание деталей, управление несколькими складами, работа с партиями и серийными номерами — всё в одном месте.
📌 Особенности проекта:
— Гибкая интеграция через REST API и Python-модули
— Мобильные приложения для iOS/Android со сканированием штрих-кодов
— Плагинная система для кастомизации под конкретные нужды
— Простой деплой — от Docker до однострочной установки на Linux
🤖 GitHub (https://github.com/inventree/InvenTree)
@Python_Community_ru
Инструмент предлагает продуманный баланс между простотой и функциональностью: отслеживание деталей, управление несколькими складами, работа с партиями и серийными номерами — всё в одном месте.
📌 Особенности проекта:
— Гибкая интеграция через REST API и Python-модули
— Мобильные приложения для iOS/Android со сканированием штрих-кодов
— Плагинная система для кастомизации под конкретные нужды
— Простой деплой — от Docker до однострочной установки на Linux
🤖 GitHub (https://github.com/inventree/InvenTree)
@Python_Community_ru
🎭 Playwright MCP: AI-доступ к браузеру через Model Context Protocol
Playwright MCP — это сервер Model Context Protocol поверх Microsoft Playwright, который позволяет LLM управлять полноценным браузером через структурированные данные, а не по скриншотам.
• Доступ к accessibility tree
– MCP-клиенты получают иерархию элементов страницы (кнопки, поля, ссылки) вместо изображений, что делает навигацию быстрой и детерминированной :contentReference[oaicite:0]{index=0}
• Множественные подключения
– Поддержка нескольких клиентов к одной сессии: одновременное тестирование, отладка и мониторинг без лишних запусках браузера :contentReference[oaicite:1]{index=1}
• AI-автогенерация тестов
– В режиме Agent Mode Playwright MCP может самостоятельно исследовать приложение и писать готовые тесты на основе его поведения :contentReference[oaicite:2]{index=2}
• Высокая производительность
– Обходится без тяжёлых компьютерного зрения и OCR, экономит ресурсы и снижает флакущие ошибки сравнения скриншотов
• Простая настройка
– Установка через npm/yarn и запуск:
npm install playwright
npx playwright launch --server
– Клиентское подключение через WebSocket:
const { chromium } = require('playwright');
const browser = await chromium.connectOverCDP('ws://localhost:PORT');
🔗 Репозиторий: https://github.com/microsoft/playwright-mcp
@Python_Community_ru
Playwright MCP — это сервер Model Context Protocol поверх Microsoft Playwright, который позволяет LLM управлять полноценным браузером через структурированные данные, а не по скриншотам.
• Доступ к accessibility tree
– MCP-клиенты получают иерархию элементов страницы (кнопки, поля, ссылки) вместо изображений, что делает навигацию быстрой и детерминированной :contentReference[oaicite:0]{index=0}
• Множественные подключения
– Поддержка нескольких клиентов к одной сессии: одновременное тестирование, отладка и мониторинг без лишних запусках браузера :contentReference[oaicite:1]{index=1}
• AI-автогенерация тестов
– В режиме Agent Mode Playwright MCP может самостоятельно исследовать приложение и писать готовые тесты на основе его поведения :contentReference[oaicite:2]{index=2}
• Высокая производительность
– Обходится без тяжёлых компьютерного зрения и OCR, экономит ресурсы и снижает флакущие ошибки сравнения скриншотов
• Простая настройка
– Установка через npm/yarn и запуск:
npm install playwright
npx playwright launch --server
– Клиентское подключение через WebSocket:
const { chromium } = require('playwright');
const browser = await chromium.connectOverCDP('ws://localhost:PORT');
🔗 Репозиторий: https://github.com/microsoft/playwright-mcp
@Python_Community_ru
🛠️ Copier — удобный инструмент для создания и обновления проектов из шаблонов. Эта Python-утилита умеет работать как с локальными путями, так и с Git-репозиториями, подставляя переменные в файлы любого формата. Главная фишка Copier — это аккуратная работа с существующими файлами: он не перезаписывает их без явного указания.
Инструмент будет полезен тем, кто часто создаёт однотипные проекты или хочет автоматизировать их обновление. Шаблоны поддерживают сложную логику через Jinja2, а настройки задаются в простом YAML-формате. Для начала работы достаточно установить Copier через pipx или pip. Проект развивается при поддержке сообщества и доступен под лицензией MIT.
🤖 GitHub (https://github.com/copier-org/copier)
@Python_Community_ru
Инструмент будет полезен тем, кто часто создаёт однотипные проекты или хочет автоматизировать их обновление. Шаблоны поддерживают сложную логику через Jinja2, а настройки задаются в простом YAML-формате. Для начала работы достаточно установить Copier через pipx или pip. Проект развивается при поддержке сообщества и доступен под лицензией MIT.
🤖 GitHub (https://github.com/copier-org/copier)
@Python_Community_ru
🚦 premier — удобный инструмент для ограничения частоты вызовов в Python
Что это такое:
premier — это библиотека для контроля скорости вызовов функций в Python. Она помогает ограничить нагрузку на API, базу данных или любой другой ресурс, чтобы не получить отказ или блокировку.
📌 Возможности:
• Поддержка популярных алгоритмов: token bucket, fixed window, leaky bucket
• Работает как с обычными, так и с асинхронными функциями
• Поддерживает Redis и другие хранилища для распределённого ограничения
• Гибкая настройка: лимиты, ключи, длительность окна, своя логика
• Простое применение через декораторы
🧪 Пример:
from premier import throttler, ThrottleAlgo, RedisHandler
@throttler.fixed_window(quota=3, duration=5)
def request(url: str):
# максимум 3 вызова каждые 5 секунд
...
@throttler.token_bucket(quota=5, duration=60)
async def async_request(...):
# асинхронный токен-бакет
...
🔧 Где применить:
• Ограничение частоты запросов к внешним API
• Защита от перегрузки микросервисов
• Контроль доступа к ресурсам внутри приложения
• Настройка rate-limit в фоновом обработчике или очереди
✅ Почему стоит попробовать:
premier — лёгкая, понятная и гибкая библиотека. Она упрощает внедрение rate limiting, особенно если нужно масштабироваться или работать в асинхронной среде.
Если строишь что-то распределённое или просто не хочешь случайно “положить” сервис из-за частых вызовов — premier отлично подойдёт.
📌 Github (https://github.com/raceychan/premier)
@Python_Community_ru
Что это такое:
premier — это библиотека для контроля скорости вызовов функций в Python. Она помогает ограничить нагрузку на API, базу данных или любой другой ресурс, чтобы не получить отказ или блокировку.
📌 Возможности:
• Поддержка популярных алгоритмов: token bucket, fixed window, leaky bucket
• Работает как с обычными, так и с асинхронными функциями
• Поддерживает Redis и другие хранилища для распределённого ограничения
• Гибкая настройка: лимиты, ключи, длительность окна, своя логика
• Простое применение через декораторы
🧪 Пример:
from premier import throttler, ThrottleAlgo, RedisHandler
@throttler.fixed_window(quota=3, duration=5)
def request(url: str):
# максимум 3 вызова каждые 5 секунд
...
@throttler.token_bucket(quota=5, duration=60)
async def async_request(...):
# асинхронный токен-бакет
...
🔧 Где применить:
• Ограничение частоты запросов к внешним API
• Защита от перегрузки микросервисов
• Контроль доступа к ресурсам внутри приложения
• Настройка rate-limit в фоновом обработчике или очереди
✅ Почему стоит попробовать:
premier — лёгкая, понятная и гибкая библиотека. Она упрощает внедрение rate limiting, особенно если нужно масштабироваться или работать в асинхронной среде.
Если строишь что-то распределённое или просто не хочешь случайно “положить” сервис из-за частых вызовов — premier отлично подойдёт.
📌 Github (https://github.com/raceychan/premier)
@Python_Community_ru
👍1
🎯 Хочешь следить за загрузкой своей GPU прямо из Python?
Вот простой скрипт, который показывает текущую загрузку видеокарты NVIDIA (через `nvidia-smi`). Подходит для мониторинга в ML-задачах, инференсе и просто для интереса.
📦 Зависимости: установленный nvidia-smi и Python 3.6+
🧠 Код:
import subprocess
def get_gpu_utilization():
try:
result = subprocess.check_output(
['nvidia-smi', '--query-gpu=utilization.gpu,memory.used,memory.total',
'--format=csv,nounits,noheader'],
encoding='utf-8'
)
lines = result.strip().split('\n')
for idx, line in enumerate(lines):
gpu_util, mem_used, mem_total = map(str.strip, line.split(','))
print(f"🖥 GPU {idx}: {gpu_util}% load | {mem_used} MiB / {mem_total} MiB")
except FileNotFoundError:
print("❌ nvidia-smi not found. Make sure NVIDIA drivers are installed.")
except Exception as e:
print(f"⚠️ Error: {e}")
get_gpu_utilization()
📊 Вывод будет примерно такой:
GPU 0: 23% load | 412 MiB / 8192 MiB
🔥 Советы:
• Можно запускать в цикле для live-мониторинга
• Легко интегрировать в Telegram-бота или Slack-уведомления
• Работает на всех машинах с установленным NVIDIA драйвером и nvidia-smi
@Python_Community_ru
Вот простой скрипт, который показывает текущую загрузку видеокарты NVIDIA (через `nvidia-smi`). Подходит для мониторинга в ML-задачах, инференсе и просто для интереса.
📦 Зависимости: установленный nvidia-smi и Python 3.6+
🧠 Код:
import subprocess
def get_gpu_utilization():
try:
result = subprocess.check_output(
['nvidia-smi', '--query-gpu=utilization.gpu,memory.used,memory.total',
'--format=csv,nounits,noheader'],
encoding='utf-8'
)
lines = result.strip().split('\n')
for idx, line in enumerate(lines):
gpu_util, mem_used, mem_total = map(str.strip, line.split(','))
print(f"🖥 GPU {idx}: {gpu_util}% load | {mem_used} MiB / {mem_total} MiB")
except FileNotFoundError:
print("❌ nvidia-smi not found. Make sure NVIDIA drivers are installed.")
except Exception as e:
print(f"⚠️ Error: {e}")
get_gpu_utilization()
📊 Вывод будет примерно такой:
GPU 0: 23% load | 412 MiB / 8192 MiB
🔥 Советы:
• Можно запускать в цикле для live-мониторинга
• Легко интегрировать в Telegram-бота или Slack-уведомления
• Работает на всех машинах с установленным NVIDIA драйвером и nvidia-smi
@Python_Community_ru
⚡️ PyOpenCL — ускоряем Python вычисления на GPU. Этот проект даёт доступ к технологии OpenCL прямо из Python, позволяя задействовать не только видеокарты, но и любые параллельные вычислительные устройства. Он сочетает низкоуровневый контроль с автоматической обработкой ошибок и привязкой жизненного цикла объектов.
Инструмент имеет обширную документацию с примерами: от простого поэлементного умножения массивов до сложных алгоритмов с использованием локальной памяти GPU. Проект работает с реализациями OpenCL от Apple, AMD и Nvidia, а установка через Conda занимает буквально пару команд.
🤖 GitHub (https://github.com/inducer/pyopencl)
@Python_Community_ru
Инструмент имеет обширную документацию с примерами: от простого поэлементного умножения массивов до сложных алгоритмов с использованием локальной памяти GPU. Проект работает с реализациями OpenCL от Apple, AMD и Nvidia, а установка через Conda занимает буквально пару команд.
🤖 GitHub (https://github.com/inducer/pyopencl)
@Python_Community_ru
🚀 Станьте экспертом в реверс-инжиниринге и откройте для себя новые горизонты в IT.
Актуальное обучение от OTUS — это ваш старт в мир реверс-инжиниринга на практике!
👨💻 На курсе вы освоите все ключевые аспекты реверс-инжиниринга — от базовых техник и инструментов до сложных методик анализа кода, уязвимостей и патчей. Мы подготовим вас для работы с реальными кейсами, исследованием программного обеспечения и исследованиями в области безопасности.
❗️ Запись на онлайн-курсе "Reverse-Engineering" от OTUS закрывается! Оставьте заявку и получите скидку на обучение по промокодуREVERSE6 : https://clck.ru/3Mtsbb
Актуальное обучение от OTUS — это ваш старт в мир реверс-инжиниринга на практике!
👨💻 На курсе вы освоите все ключевые аспекты реверс-инжиниринга — от базовых техник и инструментов до сложных методик анализа кода, уязвимостей и патчей. Мы подготовим вас для работы с реальными кейсами, исследованием программного обеспечения и исследованиями в области безопасности.
❗️ Запись на онлайн-курсе "Reverse-Engineering" от OTUS закрывается! Оставьте заявку и получите скидку на обучение по промокоду
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
🧩 Задача для разминки
Что выведет этот код? Попробуй догадаться без запуска.
class Sneaky:
def __eq__(self, other):
print("Comparing!")
return True
a = Sneaky()
b = [a]
print(a in b)
print(a == b[0])
print(b.count(a))
🤔 Подумай: сколько раз вызовется eq?
🎯 Разбор:
print(a in b)
🔍 Проверка a in b вызывает b.__contains__(a), который по умолчанию использует ==.
👉 Вызовется eq, будет True.
print(a == b[0])
🔍 Прямое сравнение — снова eq.
print(b.count(a))
🔍 list.count сравнивает каждый элемент с ==. В нашем списке один элемент — a.
👉 Опять вызывается eq.
💥 Вывод будет:
Comparing!
True
Comparing!
True
Comparing!
1
📌 Вывод: __eq__ сработал 3 раза, и каждый раз напечатал "Comparing!".
🧠 Уловка: Python-списки используют ==, даже если это один и тот же объект! Да, a == a всё равно вызовет __eq__, если он определён.
⚠️ Фишка для интервью:
Можно подменить поведение ==, но is (сравнение идентичности) всегда быстрее и не вызывает магии.
@Python_Community_ru
Что выведет этот код? Попробуй догадаться без запуска.
class Sneaky:
def __eq__(self, other):
print("Comparing!")
return True
a = Sneaky()
b = [a]
print(a in b)
print(a == b[0])
print(b.count(a))
🤔 Подумай: сколько раз вызовется eq?
🎯 Разбор:
print(a in b)
🔍 Проверка a in b вызывает b.__contains__(a), который по умолчанию использует ==.
👉 Вызовется eq, будет True.
print(a == b[0])
🔍 Прямое сравнение — снова eq.
print(b.count(a))
🔍 list.count сравнивает каждый элемент с ==. В нашем списке один элемент — a.
👉 Опять вызывается eq.
💥 Вывод будет:
Comparing!
True
Comparing!
True
Comparing!
1
📌 Вывод: __eq__ сработал 3 раза, и каждый раз напечатал "Comparing!".
🧠 Уловка: Python-списки используют ==, даже если это один и тот же объект! Да, a == a всё равно вызовет __eq__, если он определён.
⚠️ Фишка для интервью:
Можно подменить поведение ==, но is (сравнение идентичности) всегда быстрее и не вызывает магии.
@Python_Community_ru
💻 Хочешь работать с масштабными цифровыми продуктами? Учись обрабатывать большие данные
MLOps — все более популярный среди компаний способ повышения производительности и создания надежных моделей корпоративного уровня.
✅ Владение инструментами MLOps открывает новые карьерные горизонты специалистам ML, Data Scientist’ам и Software инженерам.
💪 Ответьте на 10 вопросов и проверьте, насколько вы готовы к обучению на продвинутом курсе «MLOps» от OTUS. Cкидка на обучение по промокодуMLOPS_5 :
ПРОЙТИ ТЕСТ: https://clck.ru/3MuZiD
MLOps — все более популярный среди компаний способ повышения производительности и создания надежных моделей корпоративного уровня.
✅ Владение инструментами MLOps открывает новые карьерные горизонты специалистам ML, Data Scientist’ам и Software инженерам.
💪 Ответьте на 10 вопросов и проверьте, насколько вы готовы к обучению на продвинутом курсе «MLOps» от OTUS. Cкидка на обучение по промокоду
ПРОЙТИ ТЕСТ: https://clck.ru/3MuZiD
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
🔥 CAI — ИИ для поиска багов от Alias Robotics
Что это такое?
CAI — лёгкий фреймворк для создания AI-агентов, которые помогают автоматизировать поиск и проверку уязвимостей.
Как это работает?
- Загружаете YAML-конфиги
Опишите сценарии поиска багов, тестов и отчётов в простых текстовых файлах.
- LLM-агенты
AI-модель эмулирует протоколы (SSH, HTTP, TCP и другие) и взаимодействует с целевыми системами как настоящий тестировщик.
- Генерация и «разогрев» данных
Создавайте синтетические запросы для обучения и быстро запускайте агента на своих данных.
- Оффлайн-оценка
Собирайте результаты тестов и анализируйте их без постоянного подключения к интернету.
Зачем использовать CAI?
- Ускоряет подготовку и запуск тестов безопасности
- Позволяет гибко настраивать шаги проверки
- Повышает прозрачность и повторяемость отчётов о найденных уязвимостях
Установка и запуск:
git clone https://github.com/aliasrobotics/cai.git
cd cai
# отредактируйте config.yaml и запустите агента
📌 Github (https://github.com/aliasrobotics/cai)
@Python_Community_ru
Что это такое?
CAI — лёгкий фреймворк для создания AI-агентов, которые помогают автоматизировать поиск и проверку уязвимостей.
Как это работает?
- Загружаете YAML-конфиги
Опишите сценарии поиска багов, тестов и отчётов в простых текстовых файлах.
- LLM-агенты
AI-модель эмулирует протоколы (SSH, HTTP, TCP и другие) и взаимодействует с целевыми системами как настоящий тестировщик.
- Генерация и «разогрев» данных
Создавайте синтетические запросы для обучения и быстро запускайте агента на своих данных.
- Оффлайн-оценка
Собирайте результаты тестов и анализируйте их без постоянного подключения к интернету.
Зачем использовать CAI?
- Ускоряет подготовку и запуск тестов безопасности
- Позволяет гибко настраивать шаги проверки
- Повышает прозрачность и повторяемость отчётов о найденных уязвимостях
Установка и запуск:
git clone https://github.com/aliasrobotics/cai.git
cd cai
# отредактируйте config.yaml и запустите агента
📌 Github (https://github.com/aliasrobotics/cai)
@Python_Community_ru
👍2
🚀Углубленные навыки разработки на C++ востребованы в самых крупных IT-компаниях, готовы перейти на новый уровень?
Курс «C++ Developer. Professional» создан для разработчиков, которые хотят углубить свои знания в C++ и подготовиться к решениям реальных задач. Вы освоите передовые практики, такие как многопоточное программирование, новые стандарты C++ 20 и 23, а также научитесь работать с сетями и базами данных.
Пройдите обучение с OTUS и получите знания, которые сделают вас ценным специалистом в любой компании. Получите диплом OTUS, который признают ведущие работодатели.
⌛️Время ограничено! Успейте пройти вступительное тестирование и получить скидку на обучение. Старт курса уже скоро — не упустите свой шанс: https://clck.ru/3MuyLe
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Курс «C++ Developer. Professional» создан для разработчиков, которые хотят углубить свои знания в C++ и подготовиться к решениям реальных задач. Вы освоите передовые практики, такие как многопоточное программирование, новые стандарты C++ 20 и 23, а также научитесь работать с сетями и базами данных.
Пройдите обучение с OTUS и получите знания, которые сделают вас ценным специалистом в любой компании. Получите диплом OTUS, который признают ведущие работодатели.
⌛️Время ограничено! Успейте пройти вступительное тестирование и получить скидку на обучение. Старт курса уже скоро — не упустите свой шанс: https://clck.ru/3MuyLe
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
This media is not supported in your browser
VIEW IN TELEGRAM
📊 Vizro — low-code инструмент для создания дашбордов на Python. Интересный проект для аналитиков и дата-инженеров, позволяющий собирать интерактивные дашборды буквально в несколько строк кода. Основан на связке Plotly + Dash + Pydantic, но скрывает сложность за простым декларативным синтаксисом в JSON/YAML/Python-словарях.
Библиотека имеет встроенные best practices по визуализации данных и возможность кастомизировать всё через Python/JS, когда low-code возможностей недостаточно. Готовые дашборды выглядят профессионально и сразу готовы к продакшену.
🤖 GitHub (https://github.com/mckinsey/vizro)
@Python_Community_ru
Библиотека имеет встроенные best practices по визуализации данных и возможность кастомизировать всё через Python/JS, когда low-code возможностей недостаточно. Готовые дашборды выглядят профессионально и сразу готовы к продакшену.
🤖 GitHub (https://github.com/mckinsey/vizro)
@Python_Community_ru
👾 GREMLLM — теперь у ваших багов есть сознание
GREMLLM — это необычный Python-класс, в котором все методы и свойства создаются динамически с помощью LLM. Вы описываете, *что за объект вы хотите*, и дальше GREMLLM сам решает, что должно происходить при вызове методов или обращении к полям.
📦 Установка:
pip install gremllm
🔧 Пример:
from gremllm import Gremllm
counter = Gremllm('counter')
counter.value = 5
counter.increment()
print(counter.value) # → 6?
print(counter.to_roman_numerals()) # → VI?
🧩 Возможности:
– Динамическое поведение: всё определяется "на лету" с помощью LLM
– Поддержка OpenAI, Claude, Gemini, и локальных моделей
– Wet Mode: можно строить цепочки вызовов (методы возвращают объекты)
– Verbose Mode: выводит, какой код был сгенерирован
– Умная обработка ошибок и настройка через наследование
⚠️ Это экспериментальный инструмент. Не для продакшена. Но очень интересен для изучения LLM-интеграций в Python-код.
🔗 Репозиторий: https://github.com/ur-whitelab/gremllm
@Python_Community_ru
GREMLLM — это необычный Python-класс, в котором все методы и свойства создаются динамически с помощью LLM. Вы описываете, *что за объект вы хотите*, и дальше GREMLLM сам решает, что должно происходить при вызове методов или обращении к полям.
📦 Установка:
pip install gremllm
🔧 Пример:
from gremllm import Gremllm
counter = Gremllm('counter')
counter.value = 5
counter.increment()
print(counter.value) # → 6?
print(counter.to_roman_numerals()) # → VI?
🧩 Возможности:
– Динамическое поведение: всё определяется "на лету" с помощью LLM
– Поддержка OpenAI, Claude, Gemini, и локальных моделей
– Wet Mode: можно строить цепочки вызовов (методы возвращают объекты)
– Verbose Mode: выводит, какой код был сгенерирован
– Умная обработка ошибок и настройка через наследование
⚠️ Это экспериментальный инструмент. Не для продакшена. Но очень интересен для изучения LLM-интеграций в Python-код.
🔗 Репозиторий: https://github.com/ur-whitelab/gremllm
@Python_Community_ru
🤔2🔥1
⚡ Ускорь Python без переписывания — скомпилируй код в .so через Cython
Нужно ускорить медленные куски Python-кода (циклы, численные вычисления, парсинг)?
Не обязательно лезть в C или переписывать всё под NumPy. Можно взять свой .py`-файл, добавить одну строчку и превратить его в бинарный .so`‑модуль через Cython — без изменения логики.
# 1. Устанавливаем Cython и компилятор
pip install cython
sudo apt install build-essential
# 2. Переименовываем файл
mv myscript.py myscript.pyx
# 3. Создаём setup.py
echo '
from setuptools import setup
from Cython.Build import cythonize
setup(ext_modules=cythonize("myscript.pyx"))
' > setup.py
# 4. Компилируем
python3 setup.py build_ext --inplace
# 5. Используем как обычный модуль
python3 -c 'import myscript; myscript.main()'
@pytonl
@Python_Community_ru
Нужно ускорить медленные куски Python-кода (циклы, численные вычисления, парсинг)?
Не обязательно лезть в C или переписывать всё под NumPy. Можно взять свой .py`-файл, добавить одну строчку и превратить его в бинарный .so`‑модуль через Cython — без изменения логики.
# 1. Устанавливаем Cython и компилятор
pip install cython
sudo apt install build-essential
# 2. Переименовываем файл
mv myscript.py myscript.pyx
# 3. Создаём setup.py
echo '
from setuptools import setup
from Cython.Build import cythonize
setup(ext_modules=cythonize("myscript.pyx"))
' > setup.py
# 4. Компилируем
python3 setup.py build_ext --inplace
# 5. Используем как обычный модуль
python3 -c 'import myscript; myscript.main()'
@pytonl
@Python_Community_ru
👍3
This media is not supported in your browser
VIEW IN TELEGRAM
🧠 Ускорь import в Python-проектах с помощью lazy loading — без изменения логики
Если у тебя проект с тяжёлыми модулями (`pandas`, torch, tensorflow`), но они не всегда нужны — не загружай их зря. Python позволяет **отложить импорт до первого использования**, через встроённый `importlib.
Вот как это выглядит на практике:
import importlib
# Обёртка для ленивого импорта
def lazy_import(name):
return importlib.util.LazyLoader(importlib.import_module(name))
# Использование
np = lazy_import('numpy')
# numpy ещё не загружен
# Теперь загрузится:
print(np.array([1, 2, 3]))
@Python_Community_ru
Если у тебя проект с тяжёлыми модулями (`pandas`, torch, tensorflow`), но они не всегда нужны — не загружай их зря. Python позволяет **отложить импорт до первого использования**, через встроённый `importlib.
Вот как это выглядит на практике:
import importlib
# Обёртка для ленивого импорта
def lazy_import(name):
return importlib.util.LazyLoader(importlib.import_module(name))
# Использование
np = lazy_import('numpy')
# numpy ещё не загружен
# Теперь загрузится:
print(np.array([1, 2, 3]))
@Python_Community_ru