|
Vediamo qualcosa in più riguardo a parametri delle funzioni.
Ricordo che per definire una funzione occorre specificare una serie di parametri tra parentesi. I valori vengono assegnate parametri a secondo del loro ordine, e vengono pertanto detti parametri posizionali.
I parametri possono eventualmente prendere un valore predefinito come nel seguente esempio:
def f(x, y=1, z=2):
return x+y+z
In questo modo, se non vengono specificati nella chiamata, i parametri prendono il loro valore predefinito: ecco l'esempio.
>>> f(1)
4
Non abbiamo specificato il secondo e il terzo valore, e allora viene preso solo il valore predefinito.
Alcune osservazioni importanti. Innanzitutto è possibile specificare i parametri assegnando un valore al nome direttamente nella chiamata. Questo tecnica si chiama "keyword argument", ovvero gli argomenti della chiamata vengono specificati utilizzando il nome del parametro. Per esempio:
>>> f(x=1)
4
Posso specificare i parametri obbligatori per posizione, mentre quelli con valore predefinito per nome. Per esempio:
>>> f(1,z=4)
6
Se uso i nomi, posso specificare i parametri in qualunque ordine.
>>> f(z=4, x=2)
Naturalmente non tutte le combinazioni sono legali. Devono essere specificati sempre i parametri senza valore predefinito.
>>> f(y=2)
Traceback (most recent call last):
File "<input>", line 1, in ?
TypeError: f() takes at least 1 non-keyword argument (0 given)
In questo caso a x non viene assegnato alcun valore, e quindi sia ha un errore.
Un'altra restrizione è che devono essere specificati prima i valori senza nome e poi i valori con il nome:
>>> f(y=2, 0)
SyntaxError: non-keyword arg after keyword arg
Infine se a un parametro ho assegnato un valore per posizione, non posso assegnarlo con il nome:
>>> f(2, x=2)
Traceback (most recent call last):
File "<input>", line 1, in ?
TypeError: f() got multiple values for keyword argument 'x'
|