Python Functools Modul

Das functools-Modul enthält Werkzeuge für höherstufige Funktionen wie partial, reduce und lru_cache.

import functools

Höherstufige Funktionen sind Funktionen, die mit anderen Funktionen arbeiten. Anfänger verwenden functools meist, um eine Funktion mit fest vorgegebenen Argumenten wiederzuverwenden oder teure Ergebnisse zwischenzuspeichern.

partial()

partial erzeugt einen neuen Callables, bei dem einige Argumente bereits vorbelegt sind.

from functools import partial

def power(base, exponent):
    return base ** exponent

square = partial(power, exponent=2)
print(square(5))
25

Das ist hilfreich, wenn eine andere Funktion einen Callable mit weniger Argumenten erwartet:

from functools import partial

def greet(greeting, name):
    return f'{greeting}, {name}!'

say_hello = partial(greet, 'Hello')
print(say_hello('Ada'))
Hello, Ada!

reduce()

reduce fasst ein Iterable zu einem einzelnen Wert zusammen.

from functools import reduce

total = reduce(lambda acc, item: acc + item, [1, 2, 3, 4])
print(total)
10

Für einfache Summen solltest du die eingebaute Funktion sum() bevorzugen. reduce ist nützlicher, wenn die Kombinationsoperation speziell ist.

from functools import reduce

words = ['Python', 'Cheatsheet']
title = reduce(lambda left, right: f'{left} {right}', words)
print(title)
Python Cheatsheet

lru_cache()

lru_cache speichert Funktionsergebnisse zwischen.

from functools import lru_cache

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

print(fibonacci(10))
55

Du kannst die Cache-Nutzung prüfen:

print(fibonacci.cache_info().hits > 0)
True