Таинство стандартной библиотеки: 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 ...

Таинство стандартной библиотеки: мета-классы, что это и зачем

В Python все является объектом. Даже класс. Не объект класса, а сам класс.

>>> ().__class__
<type 'tuple'>
>>> ().__class__.__class__
<type 'type'>

Если из класса (считай "шаблон") мы создает объекты ("по шаблону делаем экземпляры"), то что делать как назвать ситуацию, когда кто-то делает классы? Стоит сказать зачем это может быть нужно:

  • изменять типы создаваемых классов.
  • Например, подмешивать миксины(примиси)
  • автоматически вызывать некоторый ...
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 ...

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

Еще один стандартный модуль в Python - itertools. Модуль itertools - сборник полезных итераторов.

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

Ссылки по теме:

more ...

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

Docstring - (сокращение от documentation string, строка документации) встроенное средство документирования модулей, функций, классов и методов. Делается очень просто - сразу после определения указывается строковое значение, которое и будет docstring'ом.

>>> def test():
...    "This is the test's docstring"
...    print "opa"

Получить доступ к docstring можно так:

>>> test.__doc__
"This is the test's docstring"

Либо так:

>>> help(test)
Help on function ...
more ...

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

Абстрактные базовые классы и интерфейсы — близкие по назначению и смыслу сущности. Как первые, так и вторые представляют собой своеобразный способ документирования кода и помогают ограничить (decouple) взаимодействие отдельных абстракций в программе (классов).

Питон — очень гибкий язык. Одна из граней этой гибкости — возможности, предоставляемые метапрограммированием. И хотя в ядре языка абстрактные классы и интерфейсы не представлены, первые были реализованы в стандартном ...

more ...