Forwarded from Machinelearning
Новая библиотека позволяет собирать AI-процессы из компонентов — как LEGO для ИИ-агентов.
- Построение асинхронных, компонуемых пайплайнов
- Поддержка Gemini и Gemini Live API
- Основана на asyncio
- Обрабатывает мультимодальные данные: текст, изображения, аудио
- Внутри готовые агенты: real-time агент, исследователь, live-комментатор
- Разработки ИИ-агентов
- Генеративных моделей, работающих в реальном времени
- Быстрой сборки MVP с мультимодальными возможностями
Установка:
pip install genai-processors
Открытый код, готовые компоненты и интеграция с API.
• Repo: https://github.com/google-gemini/genai-processors
• Blog: https://developers.googleblog.com/en/genai-processors/
@ai_machinelearning_big_data
#DeepMind #ai #ml
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3👍2🔥1
🐍 Совет дня для опытных 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 даёт инструменты, которые выглядят магией, но работают стабильно — если знаешь, как ими пользоваться.
🔥6👍3❤2🤔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]))
❤9👎2🔥2🥰1
🧠 Хитрая задача по Python — *ловушка с изменяемыми значениями по умолчанию*
Вопрос:
Что выведет следующий код?
Ваш ответ? 🤔
Многие ожидают:
Но фактически вывод будет:
🔍 Почему так происходит?
Параметр my_list=[] создаётся один раз — при определении функции. И он сохраняется между вызовами. То есть все вызовы функции используют один и тот же список по умолчанию.
Это одна из самых частых ошибок в продакшене.
✅ Правильный способ — использовать None как значение по умолчанию:
Теперь:
Каждый вызов получает новый список.
⚠️ Если вы работаете с функциями, которые принимают списки или словари — всегда проверяйте, не мутируется ли значение между вызовами.
Вопрос:
Что выведет следующий код?
def append_to_list(value, my_list=[]):
my_list.append(value)
return my_list
print(append_to_list(1))
print(append_to_list(2))
print(append_to_list(3))
Ваш ответ? 🤔
Многие ожидают:
[1]
[2]
[3]
Но фактически вывод будет:
python
[1]
[1, 2]
[1, 2, 3]
🔍 Почему так происходит?
Параметр my_list=[] создаётся один раз — при определении функции. И он сохраняется между вызовами. То есть все вызовы функции используют один и тот же список по умолчанию.
Это одна из самых частых ошибок в продакшене.
✅ Правильный способ — использовать None как значение по умолчанию:
def append_to_list(value, my_list=None):
if my_list is None:
my_list = []
my_list.append(value)
return my_list
Теперь:
[1]
[2]
[3]
Каждый вызов получает новый список.
⚠️ Если вы работаете с функциями, которые принимают списки или словари — всегда проверяйте, не мутируется ли значение между вызовами.
👍13❤4🔥2
🚀 Как оптимизировать Python‑код уже на старте — советы для новичков
Не нужно быть профи, чтобы писать быстрый и аккуратный код. Вот 7 простых приёмов, которые реально помогают:
1. Используй профайлеры (cProfile, Py‑Spy)
Перед оптимизацией — измерь время. Часто больше всего тормозят совсем неожиданные места.
2. Перестрой алгоритмы и структуры данных
Выбор между списком, множеством или словарём может кардинально изменить сложность: O(1) вместо O(n) при поиске.
3. Выбирай встроенные функции
4. Пиши list/dict comprehensions и используй zip, enumerate
Это компактнее, читабельнее и часто быстрее классических for-циклов.
5. Генераторы вместо списков, где не нужен весь набор сразу
Снижают потребление памяти и ускоряют обработку.
6. Переход на PyPy или JIT‑ускорители
PyPy, Numba и Cython могут дать прирост производительности в 2–100 раз для тяжёлых вычислений.
7. Избегай преждевременной оптимизации
Оптимизируй только то, что реально тормозит. Профайлер покажет, где именно.
🧩 Быстрый чек-лист:
• Измерил ли я время выполнения?
• Подходящие ли структуры данных?
• Используются ли встроенные функции?
• Применены ли comprehensions и генераторы?
• Рассматривал ли я PyPy или JIT?
• Код по-прежнему читаемый?
✅ Вывод: даже новичок может писать быстрый и понятный Python-код. Главное — думать, замерять и улучшать без фанатизма.
▶️ Подробности с кодом
Не нужно быть профи, чтобы писать быстрый и аккуратный код. Вот 7 простых приёмов, которые реально помогают:
1. Используй профайлеры (cProfile, Py‑Spy)
Перед оптимизацией — измерь время. Часто больше всего тормозят совсем неожиданные места.
2. Перестрой алгоритмы и структуры данных
Выбор между списком, множеством или словарём может кардинально изменить сложность: O(1) вместо O(n) при поиске.
3. Выбирай встроенные функции
map
, max
, join
— всё это написано на C и работает быстрее ручных циклов.4. Пиши list/dict comprehensions и используй zip, enumerate
Это компактнее, читабельнее и часто быстрее классических for-циклов.
5. Генераторы вместо списков, где не нужен весь набор сразу
Снижают потребление памяти и ускоряют обработку.
6. Переход на PyPy или JIT‑ускорители
PyPy, Numba и Cython могут дать прирост производительности в 2–100 раз для тяжёлых вычислений.
7. Избегай преждевременной оптимизации
Оптимизируй только то, что реально тормозит. Профайлер покажет, где именно.
🧩 Быстрый чек-лист:
• Измерил ли я время выполнения?
• Подходящие ли структуры данных?
• Используются ли встроенные функции?
• Применены ли comprehensions и генераторы?
• Рассматривал ли я PyPy или JIT?
• Код по-прежнему читаемый?
✅ Вывод: даже новичок может писать быстрый и понятный Python-код. Главное — думать, замерять и улучшать без фанатизма.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8❤5
📦 Pydantic Extra Types — коллекция дополнительных типов данных для Pydantic, которые не вошли в основную библиотеку. Проект расширяет возможности валидации данных, предлагая специфические форматы и проверки.
Типы подключаются как опциональные зависимости, позволяя выбирать только нужные компоненты. Например, можно добавить поддержку pendulum для работы с временными зонами.
🤖 GitHub
@python_job_interview
Типы подключаются как опциональные зависимости, позволяя выбирать только нужные компоненты. Например, можно добавить поддержку pendulum для работы с временными зонами.
🤖 GitHub
@python_job_interview
👍7❤2🔥2
🚀 Изучаем Python с нуля до уверенного уровня за 3 месяца — нашли лучший репозиторий для новичков.
📚 Что внутри:
• Чёткая структура по темам — от синтаксиса до ООП, без воды
• Сотни понятных примеров — меняй под себя и учись на практике
• Всё объяснено простым языком — даже если ты никогда не кодил
• Удобный формат Jupyter Notebook — легко читать и запускать
• И главное — абсолютно бесплатно
Начни разбираться в Python уже сегодня:
🔗 github.com/AllenDowney/ThinkPython
@python_job_interview
📚 Что внутри:
• Чёткая структура по темам — от синтаксиса до ООП, без воды
• Сотни понятных примеров — меняй под себя и учись на практике
• Всё объяснено простым языком — даже если ты никогда не кодил
• Удобный формат Jupyter Notebook — легко читать и запускать
• И главное — абсолютно бесплатно
Начни разбираться в Python уже сегодня:
🔗 github.com/AllenDowney/ThinkPython
@python_job_interview
❤5👍2🔥2😁1
❤9👍2🔥2
Как_построить_стратегию_поиска_работы_Практикум_Гайд.pdf
17.8 MB
Когда я впервые начал искать работу в IT, у меня уже были пет-проекты, немного знаний и огромное желание попасть в профессию. Но, если честно, я не понимал, с чего начинать. Как составить резюме? Что писать, если нет коммерческого опыта? Как вообще попасть на собеседование?
Много времени ушло на догадки, ошибки и отклики на вакансии, которые остались без ответа. Сейчас я бы с радостью сэкономил себе эти месяцы — и начал с четкой стратегии.
🧭 Такой план как раз подготовил Яндекс Практикум.
Они выпустили понятный гайд по стратегии поиска работы: шаг за шагом разбирают, как устроен найм сегодня, что реально важно работодателям, и как новичку не потеряться в этом процессе.
📌 Что чаще всего непонятно новичку:
— Как составить резюме, если нет коммерческого опыта?
— Что писать, кроме «учился на курсах» и «делал пет-проекты»?
— Где искать вакансии, чтобы не тратить месяцы впустую?
— Как пройти первое техническое интервью и не провалиться от волнения?
Всё это — не про код, а про стратегию. И хорошая новость в том, что её можно выстроить заранее.
📹 В дополнение — подборка видео от карьерных экспертов:
→ как выделиться среди кандидатов,
→ как составить резюме без опыта,
→ как пройти собеседование и получить оффер.
Гайд можно скачать прямо под этим постом — в нём простыми словами, по делу и без воды объясняют, с чего начать путь к первой работе.
Забирай гайд “Как построить стратегию поиска работы” и смотри видео с экспертами, чтобы выделиться среди кандидатов и быстрее получить оффер.
Реклама, АНО ДПО “Образовательные технологии Яндекса”, ИНН 7704282033
Много времени ушло на догадки, ошибки и отклики на вакансии, которые остались без ответа. Сейчас я бы с радостью сэкономил себе эти месяцы — и начал с четкой стратегии.
🧭 Такой план как раз подготовил Яндекс Практикум.
Они выпустили понятный гайд по стратегии поиска работы: шаг за шагом разбирают, как устроен найм сегодня, что реально важно работодателям, и как новичку не потеряться в этом процессе.
📌 Что чаще всего непонятно новичку:
— Как составить резюме, если нет коммерческого опыта?
— Что писать, кроме «учился на курсах» и «делал пет-проекты»?
— Где искать вакансии, чтобы не тратить месяцы впустую?
— Как пройти первое техническое интервью и не провалиться от волнения?
Всё это — не про код, а про стратегию. И хорошая новость в том, что её можно выстроить заранее.
📹 В дополнение — подборка видео от карьерных экспертов:
→ как выделиться среди кандидатов,
→ как составить резюме без опыта,
→ как пройти собеседование и получить оффер.
Гайд можно скачать прямо под этим постом — в нём простыми словами, по делу и без воды объясняют, с чего начать путь к первой работе.
Забирай гайд “Как построить стратегию поиска работы” и смотри видео с экспертами, чтобы выделиться среди кандидатов и быстрее получить оффер.
Реклама, АНО ДПО “Образовательные технологии Яндекса”, ИНН 7704282033
❤1
🧪 Pytest-BDD — фреймворк для Behavior Driven Development на Python. Инструмент позволяет писать тесты в формате Gherkin, используя привычный pytest. Он обладает возможность комбинировать BDD-сценарии с обычными pytest-тестами и фикстурами, что упрощает переход от unit-к интеграционным тестам.
Проект поддерживает параметризацию сценариев, различные парсеры аргументов и интеграцию с другими pytest-плагинами. Подходит для проектов, где важно совмещать технические и бизнес-требования в тестах.
🤖 GitHub
@python_job_interview
Проект поддерживает параметризацию сценариев, различные парсеры аргументов и интеграцию с другими pytest-плагинами. Подходит для проектов, где важно совмещать технические и бизнес-требования в тестах.
🤖 GitHub
@python_job_interview
❤5👍2🔥2
E-CUP возвращается. Реальные данные. Масштабные проекты. Большие призы
Решайте ML-задачи в стиле Ozon Tech. Девять победителей разделят призовой фонд соревнования — 7 200 000 рублей 🔥
Тест-драйв работы в e-com бигтехе стартует здесь.
🗓 Регистрация: https://cnrlink.com/ecup25pyquestion
💻 Формат участия: онлайн
👥 Команда: от 1 до 5 человек
🎯 Для кого: Data Scientists, ML-специалисты, аналитики данных, дата-инженеры, специалисты Big Data и разработчики, которые интересуются ML/DS.
Что вас ждёт:
🔹 Работа над проектом для миллионов пользователей на основе данных от ведущего e-com в России.
🔹 Обмен опытом с экспертами Ozon Tech.
🔹 Эксклюзивный мерч для победителей и подарки для самых активных участников.
🔹 Питчинг — 13 сентября на конференции E-CODE. Ozon Tech предоставит финалистам билеты и оплатит поездку.
Три трека E-CUP:
1️⃣ Рекомендации: предсказание следующей покупки пользователя
2️⃣ Логистика: автопланирование курьеров
3️⃣ Контроль качества: автоматическое выявление поддельных товаров
Регистрация на платформе Codenrock: https://cnrlink.com/ecup25pyquestion
Решайте ML-задачи в стиле Ozon Tech. Девять победителей разделят призовой фонд соревнования — 7 200 000 рублей 🔥
Тест-драйв работы в e-com бигтехе стартует здесь.
Что вас ждёт:
🔹 Работа над проектом для миллионов пользователей на основе данных от ведущего e-com в России.
🔹 Обмен опытом с экспертами Ozon Tech.
🔹 Эксклюзивный мерч для победителей и подарки для самых активных участников.
🔹 Питчинг — 13 сентября на конференции E-CODE. Ozon Tech предоставит финалистам билеты и оплатит поездку.
Три трека E-CUP:
Регистрация на платформе Codenrock: https://cnrlink.com/ecup25pyquestion
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3
🧩 Задача:
❓ Что будет выведено?
Многие ожидают:
Но Python выведет:
🧠 Почему так?
В Python функции не копируют значения переменных, а запоминают ссылки на них.
Когда f() вызывается, она смотрит, чему равен i на момент вызова, а не на момент создания функции.
Переменная i в цикле после завершения становится равной 2 — и все три функции ссылаются на одну и ту же переменную i.
✅ Как это исправить?
Нужно «захватить» текущее значение i в локальной области видимости через аргумент по умолчанию:
🧠 Чему это учит:
Как работают замыкания и области видимости в Python.
Почему важно понимать, когда значения «захватываются», а когда — «ссылаются».
funcs = []
for i in range(3):
def f():
return i
funcs.append(f)
results = [func() for func in funcs]
print(results)
❓ Что будет выведено?
Многие ожидают:
[0, 1, 2]
Но Python выведет:
[2, 2, 2]
🧠 Почему так?
В Python функции не копируют значения переменных, а запоминают ссылки на них.
Когда f() вызывается, она смотрит, чему равен i на момент вызова, а не на момент создания функции.
Переменная i в цикле после завершения становится равной 2 — и все три функции ссылаются на одну и ту же переменную i.
✅ Как это исправить?
Нужно «захватить» текущее значение i в локальной области видимости через аргумент по умолчанию:
funcs = []
for i in range(3):
def f(i=i):
return i
funcs.append(f)
results = [func() for func in funcs]
print(results) # [0, 1, 2]
🧠 Чему это учит:
Как работают замыкания и области видимости в Python.
Почему важно понимать, когда значения «захватываются», а когда — «ссылаются».
👍8❤2🥰1
Какое ключевое слово служит для объявления функции в Python?
a) func
b) function
c) async
d) def
Пройдите тест из 5 вопросов, чтобы проверить свои знания в Python 💪
a) func
b) function
c) async
d) def
Пройдите тест из 5 вопросов, чтобы проверить свои знания в Python 💪
❤5😁5
⚡️ Прокачивайся через практику: лучшие ресурсы для пет-проектов
Хочешь расти как разработчик — пиши код, а не только читай!
Вот 4 крутых ресурса, где ты будешь учиться через реальные задачи:
App Ideas
Список проектов от джуна до про: калькуляторы, трекеры, приложения. Есть примеры и полезные ссылки.
👉 github.com/florinpop17/app-ideas
Build Your Own X
Хочешь создать свой Git, Redis, Docker или даже ОС? Тут есть всё: гайды, туториалы и код на разных языках.
👉 github.com/codecrafters-io/build-your-own-x
Project-Based Learning
Обучение в формате "берёшь проект — делаешь". Примеры с пошаговыми инструкциями для разных языков.
👉 github.com/practical-tutorials/project-based-learning
Frontend Mentor
Получаешь макет — верстаешь сам. Отлично тренирует HTML/CSS/JS. Идеально для портфолио.
👉 frontendmentor.io
Пиши код, а не резюме. Эти ресурсы реально двигают вперёд.
Хочешь расти как разработчик — пиши код, а не только читай!
Вот 4 крутых ресурса, где ты будешь учиться через реальные задачи:
App Ideas
Список проектов от джуна до про: калькуляторы, трекеры, приложения. Есть примеры и полезные ссылки.
👉 github.com/florinpop17/app-ideas
Build Your Own X
Хочешь создать свой Git, Redis, Docker или даже ОС? Тут есть всё: гайды, туториалы и код на разных языках.
👉 github.com/codecrafters-io/build-your-own-x
Project-Based Learning
Обучение в формате "берёшь проект — делаешь". Примеры с пошаговыми инструкциями для разных языков.
👉 github.com/practical-tutorials/project-based-learning
Frontend Mentor
Получаешь макет — верстаешь сам. Отлично тренирует HTML/CSS/JS. Идеально для портфолио.
👉 frontendmentor.io
Пиши код, а не резюме. Эти ресурсы реально двигают вперёд.
❤7🔥5👍3🥰1
⚡️ Почему лучшие разработчики всегда на шаг впереди?
Потому что они знают, где брать настоящие инсайд!
Оставь “программирование в вакууме” в прошлом, выбирай свой стек — подпишись и погружайся в поток идей, лайфхаков и знаний, которые не найдёшь в открытом доступе.
ИИ: t.me/ai_machinelearning_big_data
Python: t.me/pythonl
Linux: t.me/linuxacademiya
Devops: t.me/DevOPSitsec
Базы данных: t.me/sqlhub
Мл собес t.me/machinelearning_interview
C++ t.me/cpluspluc
Docker: t.me/DevopsDocker
Хакинг: t.me/linuxkalii
МЛ: t.me/machinelearning_ru
Data Science: t.me/data_analysis_ml
Javascript: t.me/javascriptv
C#: t.me/csharp_ci
Java: t.me/java_library
Python собеседования: t.me/python_job_interview
Мобильная разработка: t.me/mobdevelop
Golang: t.me/Golang_google
React: t.me/react_tg
Rust: t.me/rust_code
ИИ: t.me/vistehno
PHP: t.me/phpshka
Android: t.me/android_its
Frontend: t.me/front
Big Data: t.me/bigdatai
МАТЕМАТИКА: t.me/data_math
Kubernets: t.me/kubernetc
Разработка игр: https://t.me/gamedev
Физика: t.me/fizmat
SQL: t.me/databases_tg
Папка Go разработчика: t.me/addlist/MUtJEeJSxeY2YTFi
Папка Python разработчика: t.me/addlist/eEPya-HF6mkxMGIy
Папка ML: https://t.me/addlist/2Ls-snqEeytkMDgy
Папка FRONTEND: https://t.me/addlist/mzMMG3RPZhY2M2Iy
🎓954ГБ ОПЕНСОРС КУРСОВ: @courses
😆ИТ-Мемы: t.me/memes_prog
🇬🇧Английский: t.me/english_forprogrammers
🧠ИИ: t.me/vistehno
🖥 Chatgpt для кода в тг: @Chatgpturbobot -
📕Ит-книги: https://t.me/addlist/BkskQciUW_FhNjEy
💼ИТ-вакансии t.me/addlist/_zyy_jQ_QUsyM2Vi
Подпишись, чтобы всегда знать, куда двигаться дальше!
Потому что они знают, где брать настоящие инсайд!
Оставь “программирование в вакууме” в прошлом, выбирай свой стек — подпишись и погружайся в поток идей, лайфхаков и знаний, которые не найдёшь в открытом доступе.
ИИ: t.me/ai_machinelearning_big_data
Python: t.me/pythonl
Linux: t.me/linuxacademiya
Devops: t.me/DevOPSitsec
Базы данных: t.me/sqlhub
Мл собес t.me/machinelearning_interview
C++ t.me/cpluspluc
Docker: t.me/DevopsDocker
Хакинг: t.me/linuxkalii
МЛ: t.me/machinelearning_ru
Data Science: t.me/data_analysis_ml
Javascript: t.me/javascriptv
C#: t.me/csharp_ci
Java: t.me/java_library
Python собеседования: t.me/python_job_interview
Мобильная разработка: t.me/mobdevelop
Golang: t.me/Golang_google
React: t.me/react_tg
Rust: t.me/rust_code
ИИ: t.me/vistehno
PHP: t.me/phpshka
Android: t.me/android_its
Frontend: t.me/front
Big Data: t.me/bigdatai
МАТЕМАТИКА: t.me/data_math
Kubernets: t.me/kubernetc
Разработка игр: https://t.me/gamedev
Физика: t.me/fizmat
SQL: t.me/databases_tg
Папка Go разработчика: t.me/addlist/MUtJEeJSxeY2YTFi
Папка Python разработчика: t.me/addlist/eEPya-HF6mkxMGIy
Папка ML: https://t.me/addlist/2Ls-snqEeytkMDgy
Папка FRONTEND: https://t.me/addlist/mzMMG3RPZhY2M2Iy
🎓954ГБ ОПЕНСОРС КУРСОВ: @courses
😆ИТ-Мемы: t.me/memes_prog
🇬🇧Английский: t.me/english_forprogrammers
🧠ИИ: t.me/vistehno
📕Ит-книги: https://t.me/addlist/BkskQciUW_FhNjEy
💼ИТ-вакансии t.me/addlist/_zyy_jQ_QUsyM2Vi
Подпишись, чтобы всегда знать, куда двигаться дальше!
Please open Telegram to view this post
VIEW IN TELEGRAM
❤4👍2🔥2
🐍 Задача: Реализация декоратора `@smart_cache` с интеллектуальным кэшированием
📌 Описание
Реализуйте декоратор
1. Интеллектуальная очистка кэша — автоматически удаляет старые записи при превышении лимита
2. Поддержка разных стратегий вытеснения — LRU, LFU, FIFO
3. Таймаут кэша — автоматическое удаление записей по времени
4. Метрики использования — сбор статистики по попаданиям/промахам
5. Потокобезопасность — корректная работа в многопоточной среде
6. Поддержка методов классов — корректная работа с
🧩 Пример использования
🛠 Требования к реализации
- Используйте только стандартную библиотеку Python
- Поддержка Python 3.7+
- Все стратегии вытеснения должны быть реализованы (LRU, LFU, FIFO)
- TTL должен работать как для отдельных записей, так и глобально
- Статистика должна включать: hits, misses, evictions, current_size
- Декоратор должен корректно работать с kwargs, *args
- Потокобезопасность через threading.Lock или аналоги
🧪 Бонусное задание
Реализуйте методы:
- cache_info() — подробная информация о текущем состоянии кэша
- cache_warmup(**kwargs) — предварительное заполнение кэша
- cache_persist(filename) — сохранение кэша в файл
- cache_load(filename) — загрузка кэша из файла
@python_job_interview
📌 Описание
Реализуйте декоратор
@smart_cache
, который кэширует результаты функции с учетом следующих требований:1. Интеллектуальная очистка кэша — автоматически удаляет старые записи при превышении лимита
2. Поддержка разных стратегий вытеснения — LRU, LFU, FIFO
3. Таймаут кэша — автоматическое удаление записей по времени
4. Метрики использования — сбор статистики по попаданиям/промахам
5. Потокобезопасность — корректная работа в многопоточной среде
6. Поддержка методов классов — корректная работа с
self
и cls
🧩 Пример использования
import time
from threading import Thread
@smart_cache(maxsize=100, strategy='LRU', ttl=300, collect_stats=True)
def fibonacci(n):
if n < 2:
return n
return fibonacci(n-1) + fibonacci(n-2)
class MathUtils:
@smart_cache(maxsize=50, strategy='LFU', ttl=600)
def expensive_calc(self, x, y):
time.sleep(0.1) # Имитация тяжелых вычислений
return x ** y + y ** x
# Использование
print(fibonacci(10)) # Вычисление
print(fibonacci(10)) # Из кэша
# Получение статистики
stats = fibonacci.cache_stats()
print(f"Cache hits: {stats['hits']}, misses: {stats['misses']}")
# Принудительная очистка
fibonacci.cache_clear()
# Многопоточное использование
def worker():
for i in range(5):
fibonacci(i)
threads = [Thread(target=worker) for _ in range(3)]
for t in threads:
t.start()
for t in threads:
t.join()
🛠 Требования к реализации
- Используйте только стандартную библиотеку Python
- Поддержка Python 3.7+
- Все стратегии вытеснения должны быть реализованы (LRU, LFU, FIFO)
- TTL должен работать как для отдельных записей, так и глобально
- Статистика должна включать: hits, misses, evictions, current_size
- Декоратор должен корректно работать с kwargs, *args
- Потокобезопасность через threading.Lock или аналоги
🧪 Бонусное задание
Реализуйте методы:
- cache_info() — подробная информация о текущем состоянии кэша
- cache_warmup(**kwargs) — предварительное заполнение кэша
- cache_persist(filename) — сохранение кэша в файл
- cache_load(filename) — загрузка кэша из файла
@python_job_interview
❤9👍2🔥1