Video Corso Base di Python 3

11: Scrivi le Tue Funzioni

Menu della Serie






Benvenuti a tutti a questa nuova lezione della serie dedicata alle basi di Python 3.6.

Uno dei concetti comuni a tutti i linguaggi di programmazione è il concetto di riutilizzo del codice.
Più un programma è complesso più saranno le righe di codice che lo compongono, e affinché sia possibile tenere il tutto sempre aggiornato è molto importante evitare ripetizioni superflue.
Fin'ora abbiamo visto alcune delle possibili metodologie applicabili per rendere il codice scritto riutilizzabile, ovvero i cicli di controllo e l'utilizzo di moduli e funzioni della Standard LIbrary.

In aggiunta alle funzioni integrate offerte da Python, potete scrivere le vostre funzioni per fargli fare ció che desiderate.

L'idea dietro al concetto di funzione è quella di assegnare una porzione di codice e delle variabili chiamate parametri ad un nome, e mediante questo nome che funge da collegamento potete richiamare tutto il codice associato.
In una scala di molto ridotta il concetto è simile a quello di variabile che abbiamo visto nella lezione numero 3.

Per lo stesso motivo per cui quando scrivete un programma e lo salvate in modo da eseguirlo in un secondo momento, potete pensare alle funzioni come a dei mini programmi all'interno dei nostri programmi, che chiamiamo ogni volta
dobbiamo utilizzare le funzionalità associate.
Le funzioni sono fantastiche quindi per fare in modo di ridurre il numero di volte che un pezzo di codice deve essere scritto in un programma.




Per definire una funzione utilizzate la parola chiave def, che informa istantaneamente Python di ció che stiamo facendo, seguita dal nome che volete dare a questa funzione.
Cercate di dare sempre dei nomi che siano rappresentativi dello scopo della funzione.
Il nome viene seguito da una coppia di parentesi, e all'interno delle parentesi metteremo i parametri, ovvero delle variabili necessarie al funzionamento della funzione.
Ma non tutte le funzioni necessitano di parametri, in questo primo esempio lasceremo le parentesi vuote.

def print_tre_volte():
print('Ciao!')
print('Ciao una seconda volta!')
print('Ciao una terza volta!')

Seguendo la logica di Python, il codice che viene inserito all'interno della funzione deve essere Indentato.
All'interno della funzione potete aggiungere tutto il codice che vi pare... le combinazioni sono infinite.
Se ora andiamo ad eseguire questo codice... F5... ci rendiamo conto che non succede ancora niente. Come mai?
Per eseguire la funzione dobbiamo richiamarla, e per fare una chiamata alla funzione possiamo semplicemente utilizzare il suo nome, all'interno della Shell Interattiva, o direttamente dall'editor testuale.

print_tre_volte()

def print_tre_volte():
print('Ciao!')
print('Ciao una seconda volta!')
print('Ciao una terza volta!')

print_tre_volte()

Andiamo ora a fare un secondo esempio in cui utilizzeremo i parametri che abbiamo prima accennato.

Definiamo una funzione sommatrice a cui passeremo due numeri e che ci restituirà la somma tra i due:

def sommatrice(a,b):
print('Questa è la funzione somma.')
print('Fornisce la somma di due numeri passati come parametri.')
risultato = a + b
print('Il risultato della somma è ' + str(risultato))

Andiamo ad eseguire la funzione mediante la chiamata al suo nome e passiamoli due numeri come argomento tra parentesi.


sommatrice(15,5)

L'argomento è il nome che viene dato al valore passato per essere depositato nella variabile parametro.
Quindi i parametri in questo caso sono a e b, e gli argomenti dei parametri 15 e 5.


Questa è la funzione somma.
Fornisce la somma di due numeri passati come parametri.
Il risultato della somma è 20

Non ci sono dei limiti al numero di parametri che è possibile passare, ma badate di sceglierli sempre con cura e di dargli anche in questo caso dei nomi specifici.
Talvolta ci troveremo in una situazione in cui è necessario avere dei parametri opzionali alle nostre funzioni, ovvero fare in modo che queste funzionino con o senza l'aggiunta di valori in questi specifici parametri.
Per rendere questo possibile, a questi parametri è associato sempre un valore di default.
Immaginate che stiate andando a comprare un laptop nuovo. Due caratteristiche da tenere sott'occhio sono sicuramente RAM e modello della CPU, che quindi sceglieremo.
Come vi sarà capitato, vi viene chiesto se volete acquistare anche un pacchetto antivirus, e voi potete scegliere se lo volete oppure meno.
Proviamo a portare questo esempio in una funzione:


def laptop_nuovo(ram,cpu, antivirus = False):
print('Il nuovo laptop avrà le seguenti caratteristiche:')
print('ram: ' + ram)
print('cpu: ' + cpu)
if antivirus == True:
print('Hai comprato anche un antivirus')

Quindi qualora non ci interessi acquistare l'antivirus possiamo semplicemente ignorare questo parametro a cui è stato dato il valore di default False:

 >>> laptop_nuovo("16gb","i7")
Il nuovo laptop avrà le seguenti caratteristiche:
ram: 16gb
cpu: i7

Diversamente se vogliamo l'antivirus ci basta passare True al parametro:
 >>> laptop_nuovo("16gb","i7",antivirus=True)
Il nuovo laptop avrà le seguenti caratteristiche:
ram: 16gb
cpu: i7
Hai comprato anche un antivirus



Vorrei ora che peró prestasse attenzione ad un dettaglio.
Nella nostra funzione sommatrice, per fare in modo di mandare in output il risultato della somma abbiamo utilizzato una seconda funzione, ovvero la funzione print, a cui abbiamo passato il risultato dell'operazione.
Proviamo a togliere tutti i print e lasciare solo la variabile risultato...


def sommatrice(a,b):
risultato = a + b

... e richiamiamo quindi funzione...

 sommatrice(3,3)

Come immaginabile, la funzione non ci restituisce nulla!
In questo caso la funzione ha passato alla Shell un tipo di dato nullo, il None type.


Per fare in modo che la nostra funzione restituisca il risultato in maniera autonoma dobbiamo utilizzare il comando return.


def sommatrice(a,b):
risultato = a + b
return(risultato)

Proviamo a richiamare la funzione...


sommatrice(3,6)
9

...ed ecco che ora ci restituisce il contenuto di risultato.




Ricapitolando:
-Lo scopo principale di una funzione è di poter riutilizzare il codice più volte ed evitare duplicazioni;
-Una funzione è definita usando la parola chiave def;
-Alle funzioni possiamo passare dei valori chiamati argomenti in delle variabili chiamate parametri, tra le parentesi della funzione;
-Possiamo creare dei parametri opzionali passando a loro un valore di default;
-L'output di una funzione è il valore del suo return;
-Tutte le funzioni hanno un return, e se non è visibile il tipo di dato passato dal return sarà NONE.