Module Functools Python
Le module functools contient des outils pour les fonctions d’ordre supérieur comme partial, reduce et lru_cache.
import functools
Les fonctions d’ordre supérieur sont des fonctions qui travaillent avec d’autres fonctions. Les débutants utilisent le plus souvent functools pour réutiliser une fonction avec certains arguments fixés, ou pour mettre en cache des résultats coûteux.
partial()
partial crée un nouvel appelable avec certains arguments déjà renseignés.
from functools import partial
def power(base, exponent):
return base ** exponent
square = partial(power, exponent=2)
print(square(5))
25
Cela est utile lorsqu’une autre fonction attend un appelable avec moins d’arguments :
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 combine un itérable en une seule valeur.
from functools import reduce
total = reduce(lambda acc, item: acc + item, [1, 2, 3, 4])
print(total)
10
Pour des sommes simples, préférez la fonction intégrée sum(). reduce est plus utile lorsque l’opération de combinaison est personnalisée.
from functools import reduce
words = ['Python', 'Cheatsheet']
title = reduce(lambda left, right: f'{left} {right}', words)
print(title)
Python Cheatsheet
lru_cache()
lru_cache mémorise les résultats d’une fonction.
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
Vous pouvez inspecter l’utilisation du cache :
print(fibonacci.cache_info().hits > 0)
True