Appendice C - Ambito di una variabile¶
All'interno di un programma ogni variabile ha una sorta di "ciclo di vita", che ne prevede la creazione, utilizzo e, infine, distruzione.
L'intero script ha un ambito definito come globale: ciò significa che tutte le variabili specificate nel corpo "principale" dello script hanno validità in tutto il nostro codice. Le singole funzioni, invece, definiscono un ambito locale, creato alla chiamata della funzione, e distrutto al termine della stessa.
Facciamo un esempio. Definiamo una funzione calcolo_voto_accesso_laurea
che accetta in ingresso un argomento, ovvero la lista con i voti degli esami.
def calcolo_voto_accesso_laurea(voti_esami):
somma_voti = 0
for voto in voti_esami:
somma_voti += voto
voto_medio = somma_voti/len(voti_esami)
voto_accesso = voto_medio / 3 * 11
return voto_accesso
Proviamo a chiamarla.
lista_voti = [18, 20, 19, 30, 24, 30]
print('Il voto di accesso è: ', calcolo_voto_accesso_laurea(lista_voti))
A schermo vedremo:
C1 - Prima modifica¶
Facciamo una prima modifica:
lista_voti = [18, 20, 19, 30, 24, 30]
def calcolo_voto_accesso_laurea(voti_esami):
print(f'La lista dei voti è: {lista_voti}')
somma_voti = 0
for voto in voti_esami:
somma_voti += voto
voto_medio = somma_voti/len(voti_esami)
voto_accesso = voto_medio / 3 * 11
return voto_accesso
print('Il voto di accesso è: ', calcolo_voto_accesso_laurea(lista_voti))
Adesso vedremo a schermo due valori:
C2 - Seconda modifica¶
Proviamo a modificare ancora il codice:
lista_voti = [18, 20, 19, 30, 24, 30]
def calcolo_voto_accesso_laurea(voti_esami):
somma_voti = 0
for voto in voti_esami:
somma_voti += voto
voto_medio = somma_voti/len(voti_esami)
voto_accesso = voto_medio / 3 * 11
return voto_accesso
print('Il voto medio è: ', voto_medio)
print('Il voto di accesso è: ', calcolo_voto_accesso_laurea(lista_voti))
Adesso vedremo a schermo il seguente risultato:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'voto_medio' is not defined
Il voto di accesso è: 86.16666666666666
Cosa è successo? Andiamo un attimo a ritroso, e partiamo dalla prima modifica.
In questo caso, infatti, abbiamo provato ad accedere alla variabile globale lista_voti
, definita nel corpo "principale" dello script, dall'interno della funzione calcola_voto_accesso_laurea
. Ciò è evidentemente possibile, in quanto possiamo accedere ad una variabile globale da un ambito locale.
Il contrario, tuttavia, non è possibile: infatti, nella seconda modifica, proviamo ad accedere ad una variabile locale alla funzione calcola_voto_accesso_laurea
dall'esterno della funzione stessa. Questo non può avvenire, perché le variabili locali "scompaiono" al termine della funzione in cui sono definite, per cui l'interprete ci darà un errore.