Quando scriviamo funzioni, potremmo avere variabili dichiarate all'interno del corpo di una funzione. Ad esempio, se una variabile name è dichiarata nella funzione, viene considerata una nuova variabile, totalmente diversa da quella dichiarata al di fuori della funzione:
name = 'Helen'
def greet():
name = 'Bob'
print('Hi', name)
greet() # Hi Bob
print('Outside:', name) # Outside: Helen
La variabile name è dichiarata nella funzione greet() e il suo ambito dura fino alla fine della funzione. Le variabili dichiarate all'interno di un certo ambito sono solitamente chiamate variabili locali. Appena il programma esce dalla funzione, "dimentica" quella variabile.
Per accedere e modificare le variabili al di fuori dell'ambito corrente, possiamo usare la parola chiave global per dire a Python che vogliamo trattare quella variabile come globale:
name = 'Helen'
def greet():
global name
name = 'Bob'
print('Hi', name)
greet() # Hi Bob
print('Outside:', name) # Outside: Bob
Questa volta la funzione greet() ha modificato la variabile globale name e ne ha cambiato il valore in Bob.
Sfida
Data la seguente funzione, prova a trovare l'errore e a correggerlo. La funzione dovrebbe restituire la somma dei valori passati finora.
total = 0
def compute_sum(val):
total = total + val
return val
print(compute_sum(10))
print(compute_sum(20))
print(compute_sum(30))