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.



Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow