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

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

Стандартная поставка Python полна возможностями. Хочется упомянуть обобщенные функции. Если простыми словами, то это такие функции, где мы не думаем о типах аргументов, а просто пишем логику. Например, (натянутый пример) оператор "+" - мы не думаем о аргументах, мы просто складывает два объекта.

Для реализации обобщенных функций в Python 3 (начиная с 3.4) появился метод singledispatch в модуле functools.

>>> @fun.register ...
more ...

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

Представим, написали мы функцию:

def super_function(server_name, host):
....print(server_name)
...........
....run_server(host)

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

Каррирование - преобразование ...

more ...