Hardcore Python: переопределяем механизм импорта

В стандартной Python начиная с 2.3 существует механизм импорт-хуков. Зачем они нужны? Все очень просто - захотелось добавить поддержку импорта из .zip архивов. Ява такое может (.jar) - чем Питон хуже? Но открывать редактор только ради .zip не очень... Поэтому Python умеет загружать модули из базы данных или с соседнего сервера.

Механизм механизм импорт-хуков реализован с помощью:

  • sys.meta_path
  • sys.path_hooks ...
more ...

Опыт разработчиков: замыкания (closure). Зачем и почему.

В синтаксисе Python один и тот же символ или конструкция часто используется для разных целей Возможно вы встречались с подобным кодом:

def outer_func(x):
    def inner_func(y):
        # inner_func замкнуло в себе х
        return y + x
    return inner_func

Похож на декоратор. Это называется замыканием. Это более общий случай декоратора. Смысл замыкания состоит в том, что определение функции "замораживает" окружающий её контекст ...

more ...

Пишем web-проекты: полиморфные связи или Foreign Key на две Django модели

Представим ситуацию. Есть модель Текст (заголовок, тело, теги) и модели Новость, Продукт, Реклама, которые имеют свои уникальные параметры. Необходимо связать Текст и все остальные - вполне логичное желание.

Как можно поступить:

  • Добавить Foreign Key в Текст (т.е. будет N=3 Foreign Key полей)
  • Сделать отдельные модели для связи - будет 3 таблицы для связки. (вручную их сделаем)
  • Сделать 2 поля, одно ...
more ...

Учебные материалы: научная графика в python

На русском языке не так много хороший книг, но есть. Среди них выделяется пособие Шабанова Павла.

Данное электронное пособие на русском языке посвящено работе с научной графикой с помощью графической библиотекой matplotlib языка программирования python.

Учебник предназначен для всех желающих освоить библиотеку matplotlib для создания научной графики в python. Книга будет интересна студентам, аспирантам и научным сотрудникам всех возрастов.

Главная ...

more ...

Полезные инструменты: tox как средство тестирования

Если вы автор Python-библиотеки, то скорее всего вам необходимо поддерживать несколько версий Python. Стандартный набор - 2.6, 2.7, 3.3, 3.4 и сейчас уже 3.5. Поддерживать несколько версий Python помогают тесты.

Не секрет, что тесты помогают допускать меньше ошибок во время поддержки проекта. Например, вы можете смелее делать рефакторинг и быть уверены, что функционал который проверяют тесты ...

more ...

Таинство стандартной библиотеки: functools.lru_cache — кэшируем результат выполнения функции

Image

Начиная с версии 3.2, в Python появилась возможность стандартными средствами организовать мемоизацию. Иными словами, кэшировать результаты вызова функции. Этот механизм представлен в виде декоратора в модуле functools и называется lru_cache (least recently used cache).

На примере изъезженных чисел Фибоначчи это выглядит так:

@lru_cache(maxsize=None)
def fib(n):
    if n < 2:
        return n
    return fib(n-1) + fib(n ...
more ...

Таинство стандартной библиотеки: multiprocessing

GIL Python снимает множество головной боли с программиста, но и не дает малой кровью использовать всю мощь CPU. А что если реально надо быстрее исполнить код? Например, надо сделать 1000 запросов в web. Можно завести несколько параллельных потоков или даже процессов. Вот с процессами только беда - как их синхронизировать между собой?

В этом случае выходит на сцену модуль multiprocessing. multiprocessing ...

more ...

Таинство стандартной библиотеки: logging

Logging — библиотека для удобного ведения логов в Python

В любой разработке приходится рано или поздно вести логи, ведь не отдашь же заказчику программу где отладочные сообщения выводятся с помощью print, да и в дальнейшем если у заказчика что то пойдет не так то можно просто попросит показать лог и понять в чем проблема(в большинстве случаев).

В чем же мощь ...

more ...

Интересные концепции: mixin'ы (примеси)

В определенных случаях множественное наследование это зло. Добро - когда классы родители не перекрывают друг друга. Частный случай такой схемы - примиси == миксины == mixin == mix in. Концепция примисей строится на идеи четкого разделения свойств и методов для сущностей.

Например,

  • если есть летающее животное, то можно смело иметь метод fly;
  • если есть раскрашиваемый объект, то можно завести методы "покрасить", и два состояния - "раскрашен ...
more ...

Полезные инструменты: pythontutor.com

Полезные инструменты: pythontutor.com

Представим ситуацию, вы читаете лекцию, пускай студентам. Хочется все по шагам и подробно рассказать о данном куске кода. Можно вести славеса пол часа, а можно продемонстрировать с помощью http://www.pythontutor.com/

more ...