2.14. Definire le funzioni¶
Una funzione raccoglie un blocco di codice sotto un nome in modo da poterlo richiamare da più punti. Ovunque un calcolo, un’azione o un blocco di lavoro strutturato compaia più di una volta, una funzione lo trasforma in un’unica entità con un nome.
La parola chiave è def:
def greet(name):
print("hello,", name)
greet("Alice")
greet("Bob")
Output:
hello, Alice
hello, Bob
La riga che inizia con def è la definizione: crea la funzione ma non ne esegue il corpo. È la chiamata greet("Alice") a eseguire il blocco indentato.
2.14.1. Parametri e argomenti¶
I nomi tra parentesi nella riga def sono i parametri: segnaposto per i valori che il chiamante fornirà. I valori effettivamente passati sono gli argomenti. Una funzione può accettare zero o più parametri:
def square(x):
return x * x
def add(a, b):
return a + b
def is_even(n):
return n % 2 == 0
Una chiamata con un numero errato di argomenti solleva immediatamente TypeError.
2.14.2. return¶
Un’istruzione return termina immediatamente la funzione e restituisce un valore al chiamante:
def absolute(x):
if x < 0:
return -x
return x
Una funzione che non raggiunge mai un return (o che ha un return nudo senza valore) restituisce None:
>>> def shout(text):
... print(text.upper())
...
>>> result = shout("hi")
HI
>>> print(result)
None
Una funzione può avere più istruzioni return; vince la prima raggiunta e il resto del corpo viene saltato.
2.14.2.1. Restituire più valori¶
Python restituisce un solo oggetto per chiamata, ma quell’oggetto può essere una tuple, e il chiamante può spacchettarla sul momento:
def minmax(values):
return (min(values), max(values))
lo, hi = minmax([3, 1, 4, 1, 5, 9])
Le parentesi attorno al valore restituito sono facoltative; return a, b e return (a, b) sono equivalenti.
2.14.3. Docstring¶
Una stringa letterale posta come prima istruzione del corpo di una funzione è una docstring. Viene memorizzata nell’oggetto funzione ed è ciò che help() visualizza:
def scale(value, factor):
"""Multiply ``value`` by ``factor`` and return the result."""
return value * factor
L’IDE mostra le docstring nei tooltip quando il cursore passa sopra il nome della funzione, quindi anche un riepilogo di una sola riga ripaga l’impegno. Le stringhe con triple virgolette permettono alla docstring di estendersi su più righe quando servono maggiori dettagli.
2.14.4. Convenzioni di denominazione¶
I nomi delle funzioni usano lo snake_case: parole minuscole separate da trattini bassi. Il nome dovrebbe descrivere ciò che la funzione fa:
Bene:
read_temperature,parse_header,is_valid.Da evitare:
do_stuff,handle1,temp_func.
Un trattino basso iniziale (_helper) contrassegna una funzione come interna al suo modulo. La convenzione è ampiamente rispettata, ma non viene imposta da Python.