Статьи и заметки
Рассказываем о разработке, искусственном интеллекте и о том, что нас вдохновляет. Делимся опытом команды Pandora Research.
Подключение S3-хранилища к проекту Django
Пошагово настраиваем раздачу статических и медиафайлов через S3-совместимое хранилище Yandex.Cloud в Django с помощью django-storages и boto3.
AsyncIO в Python
Разбираем архитектуру цикла событий asyncio, его основные элементы и пишем простейшую асинхронную программу на Python с учётом изменений в версии 3.11.
Dockerfile для проекта на Django
Разбираем на примере, как написать Dockerfile для Django-проекта: выбор образа, установка зависимостей, раздача статики через nginx и скрипт запуска с gunicorn.
GIL: глобальная блокировка интерпретатора Python
Разбираем, что такое GIL (Global Interpreter Lock), как подсчёт ссылок в Python связан с глобальной блокировкой и когда потоки всё же имеют смысл.
Git: основы контроля версий
Краткая памятка по основным командам Git: инициализация и настройка репозитория, работа с индексом, коммиты и откат изменений — с примерами команд и вывода.
Менеджеры контекста и оператор with
Разбираемся, зачем нужны контекстные менеджеры и оператор with в Python и как создавать собственные — на основе классов с методами __enter__/__exit__ и на основе генераторов с декоратором contextmanager.
Генераторы в Python
Разбираемся, что такое генераторы в Python, как работает ключевое слово yield, чем генератор отличается от итератора и где генераторы применяются — от бесконечных последовательностей до чтения больших файлов.
Декораторы в Python
Разбираем декораторы в Python: функции высшего порядка и замыкания как их основа, «синтаксический сахар» с @, передачу аргументов через *args и **kwargs и универсальный шаблон декоратора.
Итераторы в Python
Разбираем, как устроены итераторы в Python: реализуем аналог range с методами __iter__ и __next__, смотрим, как работает цикл for под капотом, и знакомимся со встроенными итераторами enumerate, zip и open.
Корутины в Python
Разбираем корутины в Python: как они построены на генераторах, конструкция yield и метод send, декоратор для инициализации, а также преимущества и недостатки асинхронного подхода.