also, come va? che dite?
ad ogni modo, ho una questione di informatica che mi cruccia, sto perdendo un po di tempo per rilassarmi ergo python.
diciamo che io abbia questo codice:
def f(x):
x = x+1
print("il valore di x nella funzione f(x) e:", x)
return x
x = 5
z = f(x)
print(x)
print(z)il risultato di questa corsa e':
('il valore di x nella funzione f(x) e:', 6)
5
6
se invece io lo modifico cosi:
def f(x):
x = x+1
print("il valore di x nella funzione f(x) e:", x)
return x
x = 5
x = f(x)
print(x)
print(x)alla fine della corsa dice:
('il valore di x nella funzione f(x) e:', 6)
6
6
se provo a seguire i memory binding passo passo mi sorgono delle questioni, seguendoli in ordine:
1) definizione della funzione f(x) <- cosa succede ai memory binding?
2) binding di x=5
3) binding di x=f(x) <- e' qua il cambio di scope? questo non puo essere un binding dato il comportamento del programma, o sbaglio?
4) cambio di scope
5) esecuzione di x = x+1
come cazzo a fatto a farlo prendendo il primo binding di x=5 se io gli ho fatto rifafre il binding come x=f(x)? x=5 a quel punto non dovrebbe essere diventato cibo per il garbage collector? evidentemente no, o si? e come mai nel primo caso nonostate io abbia alla fine della funzione un return x il valore di x printato e' 5 invece di 6, il print(x) in quel caso e' stato fatto dopo il return della funzione dove x e' stato incrementato, la variabile z si e' occupata di chiamare la funzione, cosa e' successo.
sono consufo, fa caldo.
Please consider the environment before printing this message, 50% of the above is useless!