[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