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