English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
InFunzione definita dall'utenteNell'articolo abbiamo appreso su come definire una funzione e chiamarla. Se non si è sicuri del modo di chiamare una funzione, può causare errori imprevisti. Di seguito è riportato un esempio.
def greet(name, msg): """Questa è una funzione di saluto" I parametri name,msg sono due print("Ciao", name + ', ' + msg) greet("Monica", "Buongiorno!")
Risultato di output
Ciao Monica, Buongiorno!
La funzione greet() ha due parametri.
Poiché abbiamo chiamato la funzione con due parametri, questa si esegue correttamente e non genera alcun errore.
Se si chiama la funzione con un numero diverso di parametri, l'interprete mostrerà un messaggio di errore. Di seguito è riportato un esempio di chiamata alla funzione, che dimostra gli errori generati chiamando con un solo parametro e senza parametri, dopo l'esecuzione.
>>> greet("Monica") # solo un parametro è stato passato TypeError: greet() missing 1 required positional argument: 'msg'
>>> greet() # 没有传入任何参数 >>> greet() # Non sono stati passati alcun parametro
Parametri variabili delle funzioni
Fino ad ora, le funzioni hanno un numero fisso di parametri. In Python, ci sono altri modi per definire funzioni che possono accettare un numero variabile di parametri.
In Python, i parametri delle funzioni possono avere valori predefiniti.
Possiamo usare l'operatore di assegnazione (=) per fornire valori predefiniti ai parametri. Ecco un esempio.
def greet(name, msg="Buon giorno!"): """ Questa funzione saluta la persona che fornisce il messaggio. Se non viene fornito un messaggio: è predefinito a "Buon giorno!" """ print("Ciao", name + ', ' + msg) greet("Zhang San") greet("Li Si", "Come stai di recente?")
Risultato di output
Ciao, Zhang San, buona mattina! Ciao, Li Si, come stai di recente?
In questa funzione, il parametro name non ha un valore predefinito, quindi il parametro name deve essere passato quando si chiama questa funzione (obbligatorio).
D'altra parte, il valore predefinito del parametro msg è "Good morning!", quindi non è necessario passare un valore quando si chiama la funzione. Se si passa un valore quando si chiama la funzione, questo valore sovrascriverà il valore predefinito.
Un numero illimitato di parametri nella funzione può avere valori predefiniti. Ma una volta che ci sono parametri predefiniti, tutti i parametri a destra devono avere valori predefiniti.
Questo significa che i parametri non predefiniti non possono seguire i parametri predefiniti. Ad esempio, se definiamo l'intestazione della funzione sopra in questo modo:
def greet(msg = "Good morning!", name):
Riceveremo il seguente messaggio di errore:
SyntaxError: argomento non predefinito segue argomento predefinito
Quando chiamiamo una funzione con alcuni valori, questi valori vengono assegnati ai parametri in base alla loro posizione.
Ad esempio, nella funzione greet() sopra, quando la chiamiamo come greet("Bruce", "How do you do?") il valore "Bruce" viene assegnato al parametronamee "How do you do?" è assegnato a msg.
Python permette di chiamare le funzioni utilizzando i parametri a chiave. Quando chiamiamo le funzioni in questo modo, l'ordine (posizione) dei parametri può essere cambiato. Questa successiva chiamata alla funzione è valida e produce lo stesso risultato.
# 2 argomenti chiave greet(name="Bruce", msg="How do you do?") # 2 argomenti chiave, ordine dei parametri invertito greet(msg="How do you do?", name="Bruce") # 1 argomento posizionale, 1 argomento chiave greet("Bruce", msg="How do you do?")
Come visto, possiamo mescolare argomenti posizionali e argomenti chiave durante la chiamata di funzione. Tuttavia, dobbiamo ricordare che gli argomenti chiave devono seguire gli argomenti posizionali.
Mettere un argomento posizionale dopo un argomento chiave causerà un errore. Ad esempio, la chiamata di funzione è come segue:
greet(name="Bruce","How do you do?")
Questo causerà un errore:
SyntaxError: argomento non-chiave dopo argomento chiave
A volte, non sappiamo in anticipo il numero di parametri che passeremo alla funzione. Python ci permette di gestire questa situazione tramite chiamate di funzione con un numero variabile di parametri.
Nel definire la funzione, usiamo l'asterisco (*) davanti al nome del parametro per indicare questo tipo di parametro. Ecco un esempio.
def greet(*names): """L'oggetto salutato da questa funzione è Tutti i presenti nella lista di tuple.""" # Il nome è una tupla con parametri for name in names: print("Ciao", name) greet("Monica", "Luke", "Steve", "John")
Risultato di output
Ciao Monica Ciao Luke Ciao Steve Ciao John
In questo esempio, abbiamo chiamato una funzione con più parametri. Questi parametri vengono impacchettati in un tuple prima di essere passati alla funzione. Dentro la funzione, usiamo un ciclo for per recuperare tutti i parametri.