[Python] Questo, da Python, non me lo sarei mai aspettato

Riccardo Ghetta rghetta a larix.it
Lun 12 Feb 2024 10:21:52 CET


Ciao,
quando crei una funzione con parametri di default in python, funziona un 
po' come se l'avessi in realtà dichiarata così (*)

var_0001 = []
def prova(cambia, par):
     if par is None:    	
	par = var_0001
	
     if cambia:
         par.append('pippo')
         print("cambiata")
     print(par)

e l'interprete avesse trasformato le chiamate in

prova(False, None)        # []
prova(True, None)         # cambiata \n ['pippo']
prova(False, None)        # ['pippo']



In altre parole, ogni volta che entri nella funzione il parametro /par 
/viene agganciato alla variabile /var_0001 /e quindi ogni modifica al 
contenuto di /par /tocca la variabile.
se invece di append metti
par = ['pippo']
invece non modifichi /var_0001/, ma stai semplicemente agganciando par 
a/['pippo']/
La prossima volta par sarà riagganciato alla variabile originaria e 
quindi avrai sempre

prova(False, None)        # []
prova(True, None)         # cambiata \n ['pippo']
prova(False, None)        # []

Ciao,
Riccardo
------------------------------------------------------------------------
(*) ovviamente l'interprete non lavora proprio così
-------------- parte successiva --------------
Un allegato HTML è stato rimosso...
URL: <http://lists.python.it/pipermail/python/attachments/20240212/4c0a281e/attachment.html>


Maggiori informazioni sulla lista Python