Nozioni di base sulle funzioni in Python

Completato

Le funzioni rappresentano il passaggio successivo dopo aver appreso le nozioni di base sulla programmazione di Python. Nella forma più semplice, una funzione contiene un codice che restituisce sempre un valore (o più valori). In alcuni casi, una funzione ha anche input facoltativi o obbligatori.

La scrittura di codice che duplica altre parti del programma diventa un'opportunità perfetta per estrarre il codice in una funzione. Sebbene sia utile condividere il codice comune tramite funzioni, è anche possibile limitare le dimensioni del codice estraendo delle parti in funzioni più piccole (più leggibili).

I programmi che evitano la duplicazione e impediscono funzioni di grandi dimensioni usando parti più piccole sono più leggibili e gestibili. In caso di errori, inoltre, l'esecuzione del debug è semplificata.

Diverse regole relative agli input sono fondamentali per sfruttare appieno le funzionalità offerte dalle funzioni.

Importante

Sebbene si usi il termine input per descrivere i valori accettati dalle funzioni, questi elementi sono in genere denominati argomenti o parametri. Per coerenza, in questo modulo si farà riferimento agli input come argomenti.

Funzioni senza argomenti

Per creare una funzione, usare la parola chiave def seguita da un nome, da parentesi e quindi dal corpo con il codice della funzione:

def rocket_parts():
    print("payload, propellant, structure")

In questo caso, rocket_parts è il nome della funzione. Tale nome è seguito dalle parentesi vuote, che indicano che non sono necessari argomenti. Infine è presente il codice, con un rientro di quattro spazi. Per usare la funzione, è necessario effettuare la chiamata in base al nome con le parentesi:

rocket_parts()
payload, propellant, structure

La funzione rocket_parts() non accetta argomenti e visualizza un'istruzione. Se è necessario usare un valore restituito da una funzione, è possibile assegnare l'output della funzione a una variabile:

output = rocket_parts()
payload, propellant, structure
output is None
True

Può sorprendere che il valore per la variabile output sia None. Ciò è dovuto al fatto che la funzione rocket_parts() non ha restituito in modo esplicito un valore. In Python, se una funzione non restituisce in modo esplicito un valore, implicitamente la variabile sarà None. L'aggiornamento della funzione per restituire la stringa anziché stamparla fa sì che la variabile output abbia un valore diverso:

def rocket_parts():
    return "payload, propellant, structure"
output = rocket_parts()
output
payload, propellant, structure

Se è necessario usare il valore di una funzione, il tipo di restituzione della funzione deve essere esplicito, In caso contrario, viene restituito None.

Nota

Non è necessario assegnare sempre la restituzione di una funzione. Nella maggior parte dei casi in cui una funzione non restituisce un valore (o più valori) in modo esplicito, non è necessario assegnare o usare il None implicito restituito.

Argomenti obbligatori e facoltativi

In Python, diverse funzioni predefinite richiedono argomenti, per altre invece sono facoltativi. Le funzioni predefinite sono immediatamente disponibili, quindi non è necessario importarle in modo esplicito.

Un esempio di funzione predefinita che richiede un argomento è any(). Questa funzione accetta un'iterabile, ad esempio un elenco, e restituisce True se un elemento nell'iterabile è True. In caso contrario, viene restituito False.

any([True, False, False])
True
any([False, False, False])
False

Se si effettua la chiamata alla funzione any() senza argomenti, viene generata un'eccezione utile. Il messaggio di errore indica che è necessario specificare almeno un argomento:

 any()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: any() takes exactly one argument (0 given)

È possibile verificare che alcune funzioni consentano l'uso di argomenti facoltativi usando un'altra funzione predefinita denominata str(). Questa funzione crea una stringa da un argomento. Se non viene passato alcun argomento, restituisce una stringa vuota:

str()
''
str(15)
'15'