Таинство стандартной библиотеки: модуль __future__

Хорошей практикой является применение deprecated нотаций (помечать, что какой-то метод/функционал будет удален в такой-то версии) Можно пойти дальше и указывать какой функционал станет обязательным в следующих версиях.

Если с deprecated еще все более-менее ясно, то как заставить компилятор понимать функционал из будущих версий?

Для этого в Python есть модуль __future__. Этот небольшой по размеру модуль -> https://hg.python.org ...

more ...

Таинство стандартной библиотеки: shelve - база данных для объектов

Модуль shelve из стандартной библиотекой можно описать одной фразой - "pickle + anydbm".

shelve позволяет сериализовать объект (прям как pickle), а потом сохранить его в виде похожем на БД (интерфейс anydbm).

>>> import shelve
>>> db = shelve.open(filename)
>>> db[key] = obj
>>> obj = db[key]
>>> db.close()

Как видно из небольшого примера, БД предоставляет интерфейс словаря. Это позволяет нам сохранять различные сериализуемые объекты под ...

more ...

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

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

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

  • sys.meta_path
  • sys.path_hooks ...
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 ...

Таинство стандартной библиотеки: модуль operator

Таинство стандартной библиотеки: модуль operator

Модуль operator содержит набор функций, соответствующих операторам Python.

Вот некоторые функции:

operator.add(a, b)  # суммирует два значения
operator.ne(a, b)  # то же, что и a!=b
operator.attrgetter('id') # возвращает ссылку, по которой можно получить атрибут "id"

Казалось бы, зачем нужны они? А ответ довольно прост - функциональное программирование с использованием итераторов иногда требует ...

more ...

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

Python имеет автоматическое управление памятью: подсчёт ссылок для большинства объектов и сборка мусора для удаления циклов. Память освобождается сразу после того, как была удалена последняя ссылка на объект.

Этот подход отлично работает для большинства приложений, но иногда возникает необходимость вести учёт объектов только когда они используются где-нибудь ещё. К сожалению, само слежение за объектами уже создает ссылку и тем самым ...

more ...

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

Таинство стандартной библиотеки: textwrap для укорочения текстов

При работе над Python Дайджестом - http://pythondigest.ru/ а именно при работе над "Колонкой автора" возникла такая задачка - уменьшить длину описания. Описание ссылок берется из RSS этой группы и оно иногда длинное.

Как же наиболее просто решить эту задачу? Самое простое - взять строку описания и взять, скажем первые 300 символов. Просто? Только вот ...

more ...

Магические методы в Python

Статья от Rafe Kettler.

Что такое магические методы? Они всё в объектно-ориентированном Питоне. Это специальные методы, с помощью которых вы можете добавить в ваши классы «магию». Они всегда обрамлены двумя нижними подчеркиваниями (например, init или lt). Ещё, они не так хорошо документированны, как хотелось бы. Все магические методы описаны в документации, но весьма беспорядочно и почти безо всякой организации. Поэтому ...

more ...