Учебная страница курса биоинформатики,
год поступления 2010
План
- Проекты:
- пятиминутка стоя: что было задано, кто что сделал; есть ли у кого уже идеи, что так, что не так в XP?
- пишем crc карточки: class - responsibilities - collaboration.
- pdb: завести репозиторий
- задание: шапки классов и тесты
- Декораторы:
- Основная идея: мы хотим довешивать к функциям новые заголовки, которых нет в языке; как можно задавать семантику таким заголовкам?
- Пример: проверка типов
- Пример: memoizing
- Формальное определение
Про метод __call__
- Пример: logging
- Декораторы с параметрами. Пример: acl
- Напоследок: стопки декораторов.
Полезные ссылки
Введение, близкое к моему порядку изложения, но без примеров (англ)
Официальное описание языка на тему определения функций (англ)
Charming Python: Decorators make magic easy -- примеры весьма навороченной магии с помощью декораторов (англ) (я бы назвал этот текст: Black magic with decorators. Безо всяких там слов easy. Довольно неплохой способ хорошенько растянуть извилины).
Встроенные декораторы в питоне
- staticmethod
- про это расскажет Саша на следующем занятии
- classmethod
- про это расскажет Саша на следующем занятии
- property
- про это расскажет Саша на следующем занятии
- contextlib.contextmanager
- как просто делать свои обработчики входа и выхода для with
- functools.wraps
- вспомогательная обёртка для создания декораторов (копирует самодокументацию и пр.)
Идеи для декораторов
- logging
- записывать вызов и, например, аргументы функции в лог
- profiling
- записывать в лог длительность исполнения функции или суммарную длительность всех исполнений или суммарную длительность исполнений с одинаковыми аргументами
- memoizing
- запоминать результаты функции для заданного набора аргументов, чтобы не пересчитывать заново
- once / lazyproperty
- первый раз вызывать вычисление функции, последующие разы возвращать первый результат (фактически, синоним memoizing для функции без аргументов)
- alias
- создавать функцию сразу с несколькими именами
- curry
- создавать функцию, которая умеет выполнять операцию частичного вызова
- typecheck
- проверять типы аргументов функции (в момент вызова)
- multimethod
- выбирать, какое тело функции исполнять, в зависимости от типов аргументов
- transaction
- следить, чтобы все части действия либо выполнились вместе, либо из них не выполнилась ни одна; записывать информацию о совершённом действии так, чтобы его было легко отменить (это очень специфично в зависимости от конкретной области применения)
- check_access
- проверять права доступа перед исполнением функции