11.1 Numero infinito di parametri
In Python le funzioni possono essere progettate per accettare un numero infinito
di parametri. Questo si ottiene tramite argomenti passati con
*args
per i parametri normali e **kwargs
per
i parametri nominativi.
Uso di *args
*args
permette a una funzione di accettare un numero arbitrario
di argomenti posizionali, che la funzione percepirà come una tupla.
Ecco un esempio:
def print_all(*args):
for item in args:
print(item)
print_all(1, 'apple', True) # stamperà 1, apple e True.
La variabile args
conterrà una tupla di tutti
i parametri che sono stati passati alla funzione durante la chiamata.
Uso di **kwargs
**kwargs
funziona in modo simile a *args
, ma per
gli argomenti nominativi, rappresentati come un dizionario. Ciò permette
alla funzione di accettare un numero qualsiasi di argomenti nominativi:
def print_named_items(**kwargs):
for key, value in kwargs.items():
print(f"{key}: {value}")
print_named_items(fruit='apple', number=1) # stamperà fruit: apple e number: 1
Questi meccanismi rendono le funzioni estremamente flessibili e utili negli scenari in cui il numero di parametri non è noto in anticipo, ad esempio nello sviluppo di API o nelle funzioni di gestione degli eventi.
Esamineremo questi casi più in dettaglio più avanti, ma dovresti sapere che in Python all'interno di una funzione puoi accedere facilmente a tutti gli argomenti che le sono stati passati. E puoi passare alla funzione tutto ciò che desideri.
11.2 Indicazione dei tipi
Come saprai, le variabili in Python non hanno un tipo specificato in anticipo. A qualsiasi variabile può essere assegnato un valore di qualsiasi tipo, e nella riga successiva un valore di un nuovo tipo, ecc.
Questo è molto comodo per i piccoli programmi e non molto comodo per quelli grandi. Quando un programma è molto grande e il numero di funzioni raggiunge le migliaia, il programmatore non può ricordare quali dati specifici devono essere passati alla funzione e in quale ordine.
Nei linguaggi con tipizzazione statica, l'IDE stesso suggerisce ai programmatori quali parametri e di quali tipi devono essere passati durante la chiamata di una funzione. Ma Python – è comunque un linguaggio con tipizzazione dinamica, e qui da queste suggerimenti non c'è modo di derivarle.
Pertanto, i creatori di Python hanno inventato qualcosa come
type hinting
. È qualcosa di simile ai tipi di variabili, ma sono più
raccomandazioni che tipi. I tipi specificati non portano alcuna limitazione.
L'indicazione dei tipi è stata introdotta in Python 3.5 ed è diventata popolare grazie allo standard PEP 484. È un meccanismo che consente ai programmatori di definire i tipi attesi di variabili, argomenti e valori restituiti delle funzioni.
Sebbene Python rimanga un linguaggio tipizzato dinamicamente, l'indicazione dei tipi aggiunge chiarezza e supporta il controllo statico dei tipi. Ecco alcuni esempi di indicazione dei tipi:
def add_numbers(a: int, b: int) -> int:
return a + b
Il tipo di variabile viene indicato con i due punti, mentre il tipo del risultato restituito della funzione con la freccia.
I vantaggi che l'indicazione del tipo-raccomandazione offre:
- Miglioramento della documentazione: L'indicazione esplicita dei tipi rende il codice auto-documentante.
- Completamento automatico migliore: Gli editor di codice possono utilizzare le informazioni sui tipi per migliorare il completamento automatico.
- Assistenza nel debugging: Il controllo statico dei tipi può identificare potenziali errori prima che il programma venga eseguito.
Strumenti per lavorare con i tipi
Python stesso non reagisce in alcun modo ai tipi dichiarati delle variabili. Invece Python ha un'utility speciale — mypy — un popolare analizzatore statico dei tipi che aiuta a individuare errori nel codice che utilizza l'indicazione dei tipi.
GO TO FULL VERSION