и посмотреть медиа
Библиотека питониста: Python Django Flask
и посмотреть медиа
Все полезное для Python разработчиков: Django, Flask и библиотеки.
Все полезное для Python разработчиков: Django, Flask и библиотеки.
Комплексный канал для питонистов. Содержит подборки библиотек, гайды по Django и Flask, примеры кода и советы. Все самое нужное в одном месте для эффективной работы и обучения веб-разработке на Python.
WeakKeyDictionary: как хранить данные «рядом с объектом» без прямой записи в атрибуты Классический паттерн: хочется прикрепить доп. данные к объекту — делаешь obj._cache = .... Но у этого три проблемы: — не работает для built-in типов и slotted классов — имена атрибутов могут конфликтовать с другим кодом — атрибуты вылезают в vars() и других местах где не ждёшь 🔑 Решение — WeakKeyDictionary from weakref import WeakKeyDictionary import ast used_names_cache: WeakKeyDictionary[ast.Module, set[str]] = WeakKeyDictionary() def all_used_names(module: ast.Module) -> set[str]: try: return used_names_cache[module] except KeyError: pass names = set() # ... заполняем set used_names_cache[module] = names return names Данные живут «здесь», а не на объекте. Производительность O(1) как у обычного атрибута. Главное преимущество: как только объект перестаёт существовать в остальном коде — запись в словаре тоже удаляется автоматически. Нет утечек памяти. ⚠️ Почему не functools.cache? @cache def all_used_names(module): ... functools.cache хранит сильные ссылки на аргументы. Даже если module больше нигде не используется — кэш держит его живым и не даёт GC освободить память. 📋 Два условия для объекта Объект должен быть hashable — выполняется по умолчанию если не переопределён __eq__ без __hash__. Объект должен поддерживать weak reference — большинство user-defined классов поддерживают. Для slotted классов нужно явно добавить: class Train: __slots__ = ("__weakref__", "wheels", "engine") 📍 Навигация: Вакансии • Задачи • Собесы Библиотека питониста #буст
Открыть канал и посмотреть медиаТолько зарегистрированные пользователи могут делиться своим мнением.
Станьте первым, кто поделится своим впечатлением об этом ресурсе!
Личный блог с размышлениями, личными историями, советами и интересными наблюдениями. Атмосферный контент для души.
Лучший бесплатный VPN прокси и WiFi hotspot для безопасного интернета.