tramonto marziano - Spirit |
Con Python --OK, anche tanti altri linguaggi-- si possono facilmente definire le funzioni in modo da rendere flessibile il passaggio di parametri; capitano casi in cui questa opzione risulta molto conveniente e il codice risulta più chiaro.
Credo serva un esempio, minimo, così mi capisco anch'io. La funzione (è solo un esempio, nèh!) udc ritorna il valore delle unità u, decine d e centinaia c che le vengono passate; per un caso più realistico si può pensare agli angoli espressi come gradi, primi e secondi o al tempo dall'anno fino al secondo. Ecco la funzione udc:
def udc(u=0, d=0, c=0):
res = u + d * 10 + c * 100
return res
Ovviamente la variabile res è ridondante si possono (tranne eventualmente per i debug) unire le righe 2 e 3 nella seguente return u + d * 10 + c * 100. Anzi c'è un'unica istruzione e --volendo-- potrei scrivere udc = lambda u, d, c : u + d * 10 + c * 100. Ma no perché i parametri hanno valori di default. (C'è anche un altro motivo, non tutti usano (già) la notazione lambda, argomento da riparlarne in futuro (forse).)
Avendo valori predefiniti per i parametri posso usare la funzione diversi modi, eccone qualcuno:
>>> udc(1, 2, 3)
321
>>> udc(1, 2)
21
>>> udc(1)
1
>>> udc()
0
>>> udc(c=8)
800
>>> udc(c=8, d=4)
840
Tutto chiaro, vero?
- chiamando la funzione con tutti gli argomenti si ha il risultato usuale;
- passando un numero di argomenti minore di quelli dichiarati nella definizione questi vengono assegnati da sinistra;
- posso anche chiamare la funzione senza argomenti;
- posso chiamare la funzione con gli argomenti con nome.
I nomi dei parametri vengono riconosciuti solo nella chiamata alla funzione, se ho la variabile d e la uso per la chiamata è (ovviamente) solo un valore:
>>> d = 7
>>> udc(d)
7
risultato diverso da
>>> udc(d=7)
70
Ancora una cosa (ovvia): se uso nomi quelli devono essere:
>>> udc(k=5)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: udc() got an unexpected keyword argument 'k'
OT: mi fanno notare che uso convenzioni mie non universali; per esempio è normale scrivere udc ( c = 7, d = 2 ), dipende dai gusti, secondo me è meno leggibile. Vale anche (e a volte serve) passare un argomento per riga:
>>> udc(d = 7,
... c = 2)
270
🔴
Nessun commento:
Posta un commento