🐍 Совет дня для опытных Python-разработчиков
📌 Используй декораторы с параметрами — мощный приём для логирования, контроля, кэширования и кастомных проверок.
Пример: логгер, у которого можно задать уровень логирования через аргумент:
✅ Зачем это нужно:
Декоратор гибко настраивается;
Подходит для трассировки в проде и отладки в деве;
Сохраняет сигнатуру и docstring благодаря @functools.wraps.
⚠️ Совет: избегай вложенности >2 уровней и всегда пиши тесты на поведение декоратора.
Python даёт инструменты, которые выглядят магией, но работают стабильно — если знаешь, как ими пользоваться.
📌 Используй декораторы с параметрами — мощный приём для логирования, контроля, кэширования и кастомных проверок.
Пример: логгер, у которого можно задать уровень логирования через аргумент:
import functools
import logging
def log(level=logging.INFO):
def decorator(func):
@functools.wraps(func)
def wrapper(*args, **kwargs):
logging.log(level, f"Вызов {func.__name__} с args={args}, kwargs={kwargs}")
return func(*args, **kwargs)
return wrapper
return decorator
@log(logging.DEBUG)
def compute(x, y):
return x + y
✅ Зачем это нужно:
Декоратор гибко настраивается;
Подходит для трассировки в проде и отладки в деве;
Сохраняет сигнатуру и docstring благодаря @functools.wraps.
⚠️ Совет: избегай вложенности >2 уровней и всегда пиши тесты на поведение декоратора.
Python даёт инструменты, которые выглядят магией, но работают стабильно — если знаешь, как ими пользоваться.
🔥5❤2👍1🤔1
Forwarded from Python/ django
👾 GREMLLM — теперь у ваших багов есть сознание
GREMLLM — это необычный Python-класс, в котором все методы и свойства создаются динамически с помощью LLM. Вы описываете, *что за объект вы хотите*, и дальше GREMLLM сам решает, что должно происходить при вызове методов или обращении к полям.
📦 Установка:
🔧 Пример:
🧩 Возможности:
– Динамическое поведение: всё определяется "на лету" с помощью LLM
– Поддержка OpenAI, Claude, Gemini, и локальных моделей
– Wet Mode: можно строить цепочки вызовов (методы возвращают объекты)
– Verbose Mode: выводит, какой код был сгенерирован
– Умная обработка ошибок и настройка через наследование
⚠️ Это экспериментальный инструмент. Не для продакшена. Но очень интересен для изучения LLM-интеграций в Python-код.
🔗 Репозиторий: https://github.com/ur-whitelab/gremllm
@pythonl
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
@pythonl
❤3👍1🔥1
This media is not supported in your browser
VIEW IN TELEGRAM
🧠 Ускорь import в Python-проектах с помощью lazy loading — без изменения логики
Если у тебя проект с тяжёлыми модулями (`pandas`,
Вот как это выглядит на практике:
Если у тебя проект с тяжёлыми модулями (`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]))
❤3👎1