mirror of
https://github.com/m-lamonaca/dev-notes.git
synced 2025-04-08 11:56:41 +00:00
43 lines
2.1 KiB
Markdown
43 lines
2.1 KiB
Markdown
|
# Functools Module Cheat Sheet
|
||
|
|
||
|
Hiegher-order functions and operations on callable objects.
|
||
|
|
||
|
```py
|
||
|
# 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
|
||
|
```
|