Locale/globale
La risorsa all’interno della funzione appartiene all’ambiente locale, non è visibile all’esterno
def funzione_1():
a=100
print(a) # 100
def funzione_2():
print(a) # ERRORE
funzione_1()
funzione_2()
print(a) # ERRORE
La risorsa globale è visibile all’interno della funzione (solo in lettura)
def funzione():
print(a) # 10
print(a+100) # 110
a=10
print(a) # 10
funzione()
print(a) # 10
La risorsa non è modificabile all’interno della funzione perché è stata utilizzata in lettura (quindi si riferisce a una risorsa globale)
def funzione():
print(a) # 10
a=100 # ERRORE
a=10
print(a) # 10
funzione()
La risorsa, utilizzata in scrittura, è locale e copre la risorsa globale con lo stesso nome
def funzione():
a=100
print(a) # 100
a=10
print(a) # 10
funzione()
print(a) # 10
La risorsa globale a diventa visibile all’interno della funzione con la dichiarazione global a
def funzione():
global a
print(a) # 10
a=100
print(a) # 100
a=10
print(a) # 10
funzione()
print(a) # 100
Osserva
- Alla chiamata della funzione il parametro a1 viene passato alla funzione.
- La funzione possiede un parametro formale a che riceve il valore del parametro attuale a1 (10)
- Il parametro a si comporta come una variabile locale (lettura/scrittura).
- Le modifiche al valore di a non influenzano il valore di a1.
def funzione(a):
print(a) # 10
a=100
print(a) # 100
a1=10
a2=20
print(a1, a2) # 10 20
funzione(a1)
print(a1, a2) # 10 20
Risorse strutturate
Le risorse globali strutturate sono visibili all’interno delle funzioni, le modifiche sono permanenti
def funzione():
print(x) # [10, 20]
x[1]=1000
print(x) # [10, 1000]
x=[10, 20]
print(x) # [10, 20]
funzione()
print(x) # [10, 1000]
La risorsa locale x copre la visibilità della risorsa globale con lo stesso nome
def funzione():
x=[1,2,3]
print(x) # [1,2,3]
x=[10, 20]
print(x) # [10, 20]
funzione()
print(x) # [10, 20]
Il parametro formale x della funzione si riferisce alla risorsa strutturata globale x1.
Le modifiche a x (x1) sono permanenti.
def funzione(x):
print(x) # [10, 20]
x[1]=1000
print(x) # [10, 1000]
x1=[10, 20]
x2=[1, 2, 3]
print(x1, x2) # [10, 20] [1, 2, 3]
funzione(x1)
print(x1, x2) # [10, 1000] [1, 2, 3]
Parametri misti
I parametri formali della funzione x e a sono di tipo diverso
- x si riferisce alla risorsa strutturata x1 (le modifiche a x (x1) sono permanenti)
- a è una risorsa locale che alla chiamata assume il valore del parametro attuale a1 (le modifiche ad a sono locali).
def funzione(x, a):
print(x, a) # [10, 20] 10
x[1]=1000
a=100
print(x, a) # [10, 1000] 100
a1=10
a2=15
x1=[10, 20]
x2=[1, 2, 3]
print(x1, a1) # [10, 20] 10
funzione(x1, a1)
print(x1, a1) # [10, 1000] 10