problema con la modifica di una variabile all'interno di una funzione

r
rafmc98 (180 points)
0 3 7
asked Nov 14, 2017 in Programmare in Python by rafmc98 (180 points)
closed Nov 21, 2017 by andrea.sterbini
Come posso fare per passare una variabile ad una funzione, e dopo avergli apportato delle modifiche all'interno della funzione far si che la funzione mi restituisca la variabile con il nuovo valore modificato?
144 views
closed with note: answered

3 Answers

m
matteo.chiari (3650 points)
2 17 30
answered Nov 14, 2017 by matteo.chiari (3,650 points)

Ciao,

puoi usare la parola return.

Se chiami una funzione che ti restituisce qualcosa all'assegnazione di una variabile, il valore resituito verrà assegnato alla variabile. Es.:

def somma(a, b):

  return a + b

a, b = 1, 2
c = somma(a,b) 

# la variabile ora contiene la somma di a e b restituita dalla funzione somma

Gianluigi (1420 points)
7 17 30
answered Nov 14, 2017 by Gianluigi (1,420 points)
edited Nov 14, 2017 by Gianluigi
Puoi fare cosi:

    variabile = qualcosa   #qui dichiari la tua variabile in qualche modo
    variabile = funzione(variabile)   #qui assegni alla variabile il valore che ti restituisce la funzione

quindi il valore di "variabile" risulterà aggiornato :)
D
Domenicobrz (1470 points)
2 9 19
answered Nov 14, 2017 by Domenicobrz (1,470 points)

In aggiunta alle altre risposte, in python è possibile modificare gli argomenti di una funzione ai quali è associata una reference ad un oggetto senza dover ritornare l'oggetto dalla funzione

Passando ad esempio una lista come argomento (mutable type) è possibile modificarne i contenuti direttamente dentro la funzione

def changeByRef(reference):
    reference[0] = 1

lista = [ 5, 2, 4 ]
print(lista[0]) # out - 5  è il primo elemento della lista
changeByRef(lista)
print(lista[0]) # out - 1  è il nuovo primo elemento della lista

Questo puo' tornare utile ad esempio quando si ha una funzione che per natura ritorna soltanto vero/falso, ma che comunque necessita di poter cambiare il valore dei suoi argomenti

D
Domenicobrz (1470 points)
2 9 19
commented Nov 14, 2017 by Domenicobrz (1,470 points)
Nota in questo caso che assegnare una lista totalmente differente all'interno di una funzione non avrebbe nessun effetto sulla lista passata come argomento perchè staresti assegnando una nuova reference ad una variabile creata all'interno della funzione, anzichè cambiare la reference a cui punta la lista originale passata come argomento.

Più info qui : https://stackoverflow.com/questions/986006/how-do-i-pass-a-variable-by-reference