Python Language
Funzioni parziali
Ricerca…
introduzione
Come probabilmente saprai, se venivi dalla scuola OOP, specializzarti in una classe astratta e usarla è una pratica da tenere a mente quando scrivi il tuo codice.
E se potessi definire una funzione astratta e specializzarla per crearne diverse versioni? Lo considera come una sorta di funzione di ereditarietà in cui si associano parametri specifici per renderli affidabili per uno scenario specifico.
Sintassi
- parziale (funzione, ** params_you_want_fix)
Parametri
Param | dettagli |
---|---|
X | il numero da sollevare |
y | l'esponente |
aumentare | la funzione di essere specializzata |
Osservazioni
Come dichiarato in Python doc il functools.partial :
Restituisce un nuovo oggetto parziale che, quando chiamato, si comporterà come func chiamato con gli argomenti posizionali args e keyword keyword arguments. Se vengono forniti più argomenti alla chiamata, vengono aggiunti agli argomenti. Se vengono forniti ulteriori argomenti per le parole chiave, essi estendono e sostituiscono le parole chiave.
Controlla questo link per vedere come può essere implementato parziale .
Alza il potere
Supponiamo di voler aumentare x a un numero y .
Scriveresti questo come:
def raise_power(x, y):
return x**y
Cosa succede se il tuo valore y può assumere un insieme finito di valori?
Supponiamo y può essere uno dei [3,4,5] e diciamo che non si desidera che l'utente finale offerta la possibilità di utilizzare tale funzione in quanto è molto computazionalmente intensive. Infatti verificherai se fornito y assume un valore valido e riscrivi la tua funzione come:
def raise(x, y):
if y in (3,4,5):
return x**y
raise NumberNotInRangeException("You should provide a valid exponent")
Disordinato? Usiamo la forma astratta e la specializziamo in tutti e tre i casi: implementiamoli parzialmente .
from functors import partial
raise_to_three = partial(raise, y=3)
raise_to_four = partial(raise, y=4)
raise_to_five = partial(raise, y=5)
Che succede qui? Abbiamo corretto i parametri y e abbiamo definito tre diverse funzioni.
Non è necessario utilizzare la funzione astratta definita in precedenza (è possibile renderla privata ) ma è possibile utilizzare le funzioni applicate parziali per gestire l'aumento di un numero a un valore fisso.