Introduzione
A function is a block of instructions that performs an action and, once defined, can be reused. Functions make code more modular, allowing you to use the same code over and over again.
Python ha diverse funzioni integrate con cui potresti essere familiare, tra cui:
print()
che stamperà un oggetto sul terminaleint()
che convertirà una stringa o un numero in un tipo di dato interolen()
che restituisce la lunghezza di un oggetto
I nomi delle funzioni includono parentesi e possono includere parametri.
In questo tutorial, esamineremo come definire le tue funzioni da utilizzare nei tuoi progetti di codifica.
Prerequisiti
Dovresti avere Python 3 installato e un ambiente di programmazione configurato sul tuo computer o server. Se non hai un ambiente di programmazione configurato, puoi fare riferimento alle guide di installazione e configurazione per un ambiente di programmazione locale o per un ambiente di programmazione sul tuo server appropriato per il tuo sistema operativo (Ubuntu, CentOS, Debian, ecc.).
Definizione di una Funzione
Cominciamo trasformando il classico programma “Ciao, Mondo!” in una funzione.
Creeremo un nuovo file di testo nel nostro editor di testo preferito e chiameremo il programma hello.py
. Poi, definiremo la funzione.
A function is defined by using the def
keyword, followed by a name of your choosing, followed by a set of parentheses which hold any parameters the function will take (they can be empty), and ending with a colon.
Informazioni: Per seguire l’esempio di codice in questo tutorial, apri una shell interattiva Python sul tuo sistema locale eseguendo il comando python3
. Quindi puoi copiare, incollare o modificare gli esempi aggiungendoli dopo il prompt >>>
.
In questo caso, definiremo una funzione chiamata hello()
:
Questo stabilisce l’istruzione iniziale per la creazione di una funzione.
Da qui, aggiungeremo una seconda riga con un rientro di 4 spazi per fornire le istruzioni su cosa fa la funzione. In questo caso, stamperemo Ciao, Mondo!
sulla console:
Ora la nostra funzione è completamente definita, ma se eseguiamo il programma in questo punto, non succederà nulla poiché non abbiamo chiamato la funzione.
Quindi, al di fuori del nostro blocco di funzione definito, chiamiamo la funzione con hello()
:
Adesso, eseguiamo il programma:
Dovresti ricevere l’output seguente:
OutputHello, World!
Le funzioni possono essere più complicate della funzione hello()
che abbiamo definito in precedenza. Ad esempio, possiamo utilizzare cicli for
, dichiarazioni condizionali e altro ancora all’interno del blocco della nostra funzione.
Per esempio, la funzione definita di seguito utilizza una dichiarazione condizionale per controllare se l’input per la variabile name
contiene una vocale, quindi utilizza un for
loop per iterare sui caratteri nella stringa name
.
La funzione names()
che abbiamo definito sopra imposta una dichiarazione condizionale e un for
loop, mostrando come il codice possa essere organizzato all’interno di una definizione di funzione. Tuttavia, a seconda di ciò che intendiamo con il nostro programma e di come vogliamo organizzare il nostro codice, potremmo voler definire la dichiarazione condizionale e il for
loop come due funzioni separate.
Definire le funzioni all’interno di un programma rende il nostro codice modulare e riutilizzabile in modo che possiamo chiamare le stesse funzioni senza riscriverle.
Lavorare con i Parametri
Fino ad ora abbiamo esaminato le funzioni con parentesi vuote che non accettano argomenti, ma possiamo definire parametri nelle definizioni delle funzioni all’interno delle loro parentesi.
A parameter is a named entity in a function definition, specifying an argument that the function can accept.
Creiamo un piccolo programma che prende in input i parametri x
, y
e z
. Creeremo una funzione che aggiunge i parametri insieme in diverse configurazioni. Le somme di questi verranno stampate dalla funzione. Poi chiameremo la funzione e passeremo dei numeri alla funzione.
Abbiamo passato il numero 1
per il parametro x
, 2
per il parametro y
e 3
per il parametro z
. Questi valori corrispondono con ciascun parametro nell’ordine in cui sono dati.
Il programma sta essenzialmente facendo la seguente matematica basata sui valori che abbiamo passato ai parametri:
a = 1 + 2
b = 1 + 3
c = 2 + 3
La funzione stampa anche a
, b
e c
, e in base alla matematica sopra ci aspetteremmo che a
sia uguale a 3
, b
sia 4
e c
sia 5
. Eseguiamo il programma:
Output3 4 5
Quando passiamo 1
, 2
e 3
come parametri alla funzione add_numbers()
, otteniamo l’output previsto.
I parametri sono argomenti che vengono tipicamente definiti come variabili all’interno delle definizioni di funzione. Possono essere assegnati valori quando si esegue il metodo, passando gli argomenti alla funzione.
Argomenti con parola chiave
Oltre a chiamare i parametri in ordine, è possibile utilizzare gli argomenti con parola chiave in una chiamata di funzione, in cui il chiamante identifica gli argomenti per nome parametro.
Quando si utilizzano gli argomenti con parola chiave, è possibile utilizzare i parametri fuori ordine perché l’interprete Python utilizzerà le parole chiave fornite per corrispondere i valori ai parametri.
Creiamo una funzione che ci mostrerà le informazioni del profilo per un utente. Passeremo i parametri ad essa sotto forma di username
(inteso come stringa) e followers
(inteso come un intero).
All’interno della dichiarazione della definizione della funzione, username
e followers
sono contenuti tra le parentesi della funzione profile_info()
. Il blocco della funzione stampa le informazioni sull’utente come stringhe, facendo uso dei due parametri.
Ora, possiamo chiamare la funzione e assegnare parametri ad essa:
Nella prima chiamata di funzione, abbiamo compilato le informazioni con un nome utente di sammyshark
e un numero di follower pari a 945
, nella seconda chiamata di funzione abbiamo utilizzato gli argomenti di parola chiave, assegnando valori alle variabili di argomento.
Eseguiamo il programma:
OutputUsername: sammyshark
Followers: 945
Username: AlexAnglerfish
Followers: 342
L’output ci mostra i nomi utente e il numero di follower per entrambi gli utenti.
Ciò ci permette anche di modificare l’ordine dei parametri, come in questo esempio del medesimo programma con una chiamata diversa:
Quando eseguiamo nuovamente il programma con il comando python profile.py
, riceveremo il seguente output:
OutputUsername: cameron-catfish
Followers: 820
Poiché la definizione della funzione mantiene lo stesso ordine delle istruzioni print()
, se utilizziamo gli argomenti di parola chiave, non importa in quale ordine li passiamo nella chiamata di funzione.
Valori predefiniti degli argomenti
Possiamo anche fornire valori predefiniti per uno o entrambi i parametri. Creiamo un valore predefinito per il parametro followers
con un valore di 1
:
Ora, possiamo eseguire la funzione con solo il nome utente assegnato e la quantità di follower verrà automaticamente impostata su 1 per default. Possiamo comunque cambiare il numero di follower se lo desideriamo.
Quando eseguiamo il programma con il comando python profile.py
, riceveremo il seguente output:
OutputUsername: JOctopus
Followers: 1
Username: sammyshark
Followers: 945
Fornire parametri predefiniti con valori può consentirci di saltare la definizione dei valori per ciascun argomento che ha già un valore predefinito.
Restituire un Valore
È possibile passare un valore del parametro in una funzione, e una funzione può anche produrre un valore.
A function can produce a value with the return
statement, which will exit a function and optionally pass an expression back to the caller. If you use a return
statement with no arguments, the function will return None
.
Fino ad ora, abbiamo usato l’istruzione print()
invece dell’istruzione return
nelle nostre funzioni. Creiamo un programma che invece di stampare restituirà una variabile.
In un nuovo file di testo chiamato square.py
, creeremo un programma che eleva al quadrato il parametro x
e restituisce la variabile y
. Emettiamo una chiamata per stampare la variabile result
, che è formata eseguendo la funzione square()
con 3
passato ad essa.
Possiamo eseguire il programma e ricevere l’output:
Output9
Il numero intero 9
viene restituito come output, che è ciò che ci aspetteremmo chiedendo a Python di trovare il quadrato di 3.
Per comprendere meglio come funziona l’istruzione return
, possiamo commentare l’istruzione return
nel programma:
Ora, eseguiamo di nuovo il programma:
OutputNone
Senza utilizzare l’istruzione return
qui, il programma non può restituire un valore quindi il valore predefinito è None
.
Come altro esempio, nel programma add_numbers.py
sopra, potremmo sostituire l’istruzione print()
con un’istruzione return
.
All’esterno della funzione, abbiamo impostato la variabile somme
uguale al risultato della funzione che prende in input 1
, 2
, e 3
come abbiamo fatto prima. Poi abbiamo chiamato una stampa della variabile somme
.
Eseguiamo il programma di nuovo ora che ha l’istruzione return
:
Output(3, 4, 5)
Riceviamo gli stessi numeri 3
, 4
, e 5
come output che abbiamo ricevuto precedentemente usando l’istruzione print()
nella funzione. Questa volta viene restituito come una tupla perché la lista di espressioni dell’istruzione return
ha almeno una virgola.
Le funzioni escono immediatamente quando incontrano un’istruzione return
, che stiano o meno restituendo un valore.
Usare l’istruzione return
all’interno del ciclo for
termina la funzione, quindi la riga che è al di fuori del ciclo non verrà eseguita. Se, invece, avessimo usato un istruzione break
, solo il ciclo sarebbe uscito in quel momento, e l’ultima riga print()
sarebbe stata eseguita.
Il comando return
esce da una funzione e può restituire un valore quando emesso con un parametro.
Utilizzare main()
come funzione
Anche se in Python è possibile chiamare la funzione alla fine del programma e verrà eseguita (come abbiamo fatto negli esempi precedenti), molti linguaggi di programmazione (come C++ e Java) richiedono una funzione main
per poter eseguire. Includere una funzione main()
, anche se non è obbligatorio, può strutturare i nostri programmi Python in modo logico che mette i componenti più importanti del programma in una funzione. Può anche rendere i nostri programmi più facili da leggere per i programmatori non esperti di Python.
Cominceremo aggiungendo una funzione main()
al programma hello.py
sopra. Manterremo la nostra funzione hello()
, e poi definiremo una funzione main()
:
All’interno della funzione main()
, includiamo una dichiarazione print()
per farci sapere che siamo nella funzione main()
. Inoltre, chiamiamo la funzione hello()
all’interno della funzione main()
:
Infine, nella parte inferiore del programma, chiameremo la funzione main()
:
A questo punto, possiamo eseguire il nostro programma:
Riceveremo l’output seguente:
OutputThis is the main function.
Hello, World!
Poiché abbiamo chiamato la funzione hello()
all’interno di main()
e poi abbiamo chiamato solo main()
per eseguire, il testo Hello, World!
viene stampato solo una volta, dopo la stringa che ci diceva che eravamo nella funzione principale.
Successivamente lavoreremo con più funzioni, quindi vale la pena rivedere la portata delle variabili globali e locali. Se definisci una variabile all’interno di un blocco di funzione, potrai utilizzare quella variabile solo all’interno di quella funzione. Se vuoi utilizzare variabili tra le funzioni, potrebbe essere meglio dichiarare una variabile globale.
In Python, '__main__'
è il nome dello scope in cui verrà eseguito il codice di livello superiore. Quando un programma viene eseguito da input standard, da uno script o da un prompt interattivo, il suo __name__
viene impostato uguale a '__main__'
.
Per questo motivo, c’è una convenzione per utilizzare la seguente costruzione:
Questo consente ai file del programma di essere utilizzati sia:
- come programma principale ed eseguire ciò che segue l’istruzione
if
- come modulo e non eseguire ciò che segue l’istruzione
if
.
Qualsiasi codice che non è contenuto in questa istruzione verrà eseguito all’avvio. Se stai utilizzando il tuo file di programma come modulo, il codice che non è in questa istruzione verrà eseguito anche durante l’importazione mentre viene eseguito il file secondario.
Espandiamo il nostro programma names.py
sopra, e creiamo un nuovo file chiamato more_names.py
. In questo programma dichiareremo una variabile globale e modificheremo la nostra funzione originale names()
in modo che le istruzioni siano in due funzioni discrete.
La prima funzione, has_vowel()
, verificherà se la stringa name
contiene una vocale.
La seconda funzione print_letters()
stamperà ogni lettera della stringa name
.
Con questa configurazione, definiamo la funzione main()
che conterrà una chiamata sia alla funzione has_vowel()
che alla funzione print_letters()
.
Infine, aggiungeremo la costruzione if __name__ == '__main__':
in fondo al file. Ai nostri scopi, poiché abbiamo inserito tutte le funzioni che vorremmo eseguire nella funzione main()
, chiameremo la funzione main()
seguendo questa istruzione if
.
Adesso possiamo eseguire il programma:
Il programma mostrerà lo stesso output del programma names.py
, ma qui il codice è più organizzato e può essere utilizzato in modo modulare senza modifiche.
Se non avessi voluto dichiarare una funzione main()
, avresti potuto terminare il programma in questo modo:
Utilizzare main()
come una funzione e l’istruzione if __name__ == '__main__':
può organizzare il tuo codice in modo logico, rendendolo più leggibile e modulare.
Conclusioni
Le funzioni sono blocchi di istruzioni che eseguono azioni all’interno di un programma, aiutando a rendere il nostro codice riutilizzabile e modulare.
Per saperne di più su come rendere il tuo codice più modulare, puoi leggere la nostra guida su Come Scrivere Moduli in Python 3.
Source:
https://www.digitalocean.com/community/tutorials/how-to-define-functions-in-python-3