0Pricing
Python Academy · Lezione

Funzioni parziali

Usare functools.partial

Funzioni parziali è una lezione Python Academy gratuita su CoddyKit. Questa è la lezione 4 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Python Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Python Academy include 4 lezioni in totale.

Che cos'è una partial?

functools.partial crea una nuova funzione con alcuni argomenti di una funzione esistente già valorizzati. È come preimpostare alcuni argomenti, così è possibile richiamare il risultato fornendone meno.

La si importa con from functools import partial.

from functools import partial
def power(base, exp):
    return base ** exp
square = partial(power, exp=2)
print(square(5))

Preimpostare gli argomenti posizionali

Gli argomenti posizionali passati a partial valorizzano i parametri della funzione da sinistra verso destra. Gli argomenti rimanenti vengono forniti quando si richiama la partial.

from functools import partial
def multiply(a, b):
    return a * b
double = partial(multiply, 2)
print(double(10))
print(double(50))

Preimpostare gli argomenti con nome

Gli argomenti con nome forniti a partial diventano valori predefiniti che è comunque possibile sovrascrivere al momento della chiamata.

from functools import partial
def greet(name, greeting='Hello'):
    return greeting + ', ' + name
hola = partial(greet, greeting='Hola')
print(hola('Ada'))
print(hola('Bob', greeting='Hey'))

Partial con funzioni integrate

È possibile creare partial anche a partire da funzioni integrate. In questo caso si crea un analizzatore di interi in base 2 a partire da int.

from functools import partial
binary = partial(int, base=2)
print(binary('1010'))
print(binary('1111'))

Callback più ordinate

Le partial sono ideali per le callback in cui è necessario passare una funzione senza argomenti o con un solo argomento, ma si desidera precaricare il contesto.

from functools import partial
def log(level, message):
    return '[' + level + '] ' + message
error = partial(log, 'ERROR')
print(error('disk full'))

Partial in map

Una partial si integra perfettamente nelle funzioni di ordine superiore come map: un argomento rimane fisso mentre l'altro varia per ogni elemento.

from functools import partial
def add(a, b):
    return a + b
add10 = partial(add, 10)
print(list(map(add10, [1, 2, 3])))

Ispezionare una partial

Un oggetto partial espone la funzione sottostante tramite .func, gli argomenti posizionali fissi tramite .args e gli argomenti con nome fissi tramite .keywords.

from functools import partial
def f(a, b, c):
    return (a, b, c)
p = partial(f, 1, c=3)
print(p.func.__name__)
print(p.args)
print(p.keywords)

Combinare le partial

È possibile creare una partial a partire da un'altra partial, aggiungendo gradualmente altri argomenti fissi.

from functools import partial
def volume(l, w, h):
    return l * w * h
base = partial(volume, 2)
slab = partial(base, 3)
print(slab(4))

Partial e lambda a confronto

Una lambda può svolgere lo stesso compito, ma partial è spesso più chiara per preimpostare gli argomenti ed espone la funzione sottostante per l'introspezione.

from functools import partial
def power(base, exp):
    return base ** exp
cube_p = partial(power, exp=3)
cube_l = lambda b: power(b, 3)
print(cube_p(2), cube_l(2))

Un esempio concreto: l'arrotondamento

Creare una funzione di arrotondamento a due decimali trasformando in partial la funzione integrata round.

from functools import partial
round2 = partial(round, ndigits=2)
print(round2(3.14159))
print(round2(2.71828))

partialmethod per le classi

La funzione correlata functools.partialmethod svolge la stessa operazione per i metodi all'interno della definizione di una classe, preimpostando gli argomenti di un metodo.

from functools import partialmethod
class Light:
    def set(self, state):
        self.state = state
        return state
    on = partialmethod(set, True)
    off = partialmethod(set, False)
l = Light()
print(l.on())
print(l.off())

Verifica rapida

Che cosa fa functools.partial?

Riepilogo: funzioni partial

Ha appreso che functools.partial:

  • Crea una nuova funzione con alcuni argomenti preimpostati, posizionali o con nome.
  • Consente di sovrascrivere al momento della chiamata i valori predefiniti con nome preimpostati.
  • È ideale per callback, map e per ridurre le ripetizioni.
  • Espone .func, .args e .keywords e dispone della variante per i metodi partialmethod.
from functools import partial
add = lambda a, b: a + b
plus1 = partial(add, 1)
print(plus1(41))

Domande Frequenti

La lezione «Funzioni parziali» è gratuita?

Sì — il testo completo di «Funzioni parziali» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Python Academy, passa a CoddyKit PRO. Il corso Python Academy include 4 lezioni in totale.

Cosa imparerò in «Funzioni parziali»?

Usare functools.partial Eserciti Python Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare Python Academy?

Non è richiesta alcuna esperienza precedente. Python Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 4 di 4.

Quanto tempo richiede la lezione «Funzioni parziali»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione Python Academy?

Sì. Ogni lezione Python Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Funzioni di prima classe
  2. Chiusure e variabili libere
  3. nonlocal e stato mutabile
  4. Funzioni parziali
← Torna a Python Academy