mirror of
https://github.com/m-lamonaca/dev-notes.git
synced 2025-04-06 10:56:41 +00:00
2.1 KiB
2.1 KiB
Functools Module Cheat Sheet
Hiegher-order functions and operations on callable objects.
# crea nuova funzione con argomenti (*args, **kwarg) parzialmente fissati
new_func = partial(func, *args, **kwargs)
# crea nuovo metodo con argomenti (*args, **kwarg) parzialmente fissati
new_method = partialmethod(func, *args, **kwargs)
# applica ripetutamente funzione( , ) all'iterabile per creare un output singolo
# funzione applicata ai primi due elementi
# restituisce inizzializzatore se l'iterabile è vuoto (dipendente dalla funzione)
reduce(funzione((arg_1, arg_2), iterabile, inizzializzatore) # -> singolo output
# decoratore che salva maxsixe:int chiamate recenti in cache
# utilizza dizionario per memorizzazione, argomenti (posizionali e keyworded devono essere hashabili)
# se maxsixe=None cache cresce indefinitivamente e feature LRU è disattivata
# LRU --> Least Recent Used. Elementi poco usati rimossi dalla cache
# per efficienza maxsize=2**n
@lru_cache(maxsize=128, typed=False)
# decoratore che trasforma la funzione in una single-dispatch generic function
# generic function --> singola funzione implementa la stessa operazione per tipi diversi (ALTERNATIVA A METHOD OVERLOAD)
# single dispatch --> forma di generic function in cui l'implementazione è decissa in base ad un singolo argomento
# ATTENZIONE: single dispatch deciso dal primo argomento
@singledispatch # crea decorated_func.register per raggruppare funzioni in una generic function
@decorated_func.register() # decide implementazione basandosi su type annotation
@decorated_func.register(type) # decide implementazione secondo argomento type (da usare se non è presente type annotation)
# il nome di decorated_func è irrilevante
# è utile usare register(type) su ABC per supportare classi più generiche e classi future
# decoratore per aggiornare wrapper function per apparire come wrapperd function
# funz_decoratrice mantiene argomenti e docstring della funzione decorata
def decorator(funzione):
@wraps(funzione)
def wrapper(): #funz_decoratrice dentro decorator
# crea operatori uguaglianza se classe ne implementa almeno uno e __eq__()
@total_ordering