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

2024-02-12 Per discussione Riccardo Ghetta
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")

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

2024-02-12 Per discussione Federico Fissore
On Mon, 12 Feb 2024 09:30:18 +0100 Daniele Zambelli wrote --- > > Mi sfugge ancora qualcosa... > Credo che quello che ti sfugge è che quando scrivi par.append('pippo') stai cambiando lo stato di una lista esistente, quella riferita dalla variabile `par`, mentre quando scrivi par = '

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

2024-02-12 Per discussione Daniele Zambelli
Il giorno lun 12 feb 2024 alle ore 09:46 Marco Beri ha scritto: > [...] > > Daniele, > il non side effect non si applica quando il valore di default di un parametro > è un mutable (lista o set o dict). > Pensa che a volte si usa questo per memoizzare brutalmente una funzione. > [...] Se non foss

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

2024-02-12 Per discussione Daniele Zambelli
Il giorno lun 12 feb 2024 alle ore 09:38 Esalando Prassi ha scritto: > > On Sun, 11 Feb 2024 at 16:32, Daniele Zambelli > wrote: >> [...] > Questo e' una cosa nota e mi sa che in tanti ci hanno sbattuto la testa: > https://docs.python-guide.org/writing/gotchas/#mutable-default-arguments > [...

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

2024-02-12 Per discussione Marco Beri
Il giorno lun 12 feb 2024 alle ore 09:36 Daniele Zambelli < daniele.zambe...@gmail.com> ha scritto: > Lo strano per me è che il valore di default dovrebbe essere una lista > vuota ogni volta che chiamo la funzione invece la seconda volta è una > lista con i valori che sono stati inseriti dalla fun

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

2024-02-12 Per discussione Esalando Prassi
On Sun, 11 Feb 2024 at 16:32, Daniele Zambelli wrote: > Stavo studiando degli algoritmi per produrre la lista delle > permutazioni di una sequenza, ho modificato una funzione che ho > trovato su stackoverflow e mi sono imbattuto in un comportamento molto > strano (per me). > Lo script è questo: >

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

2024-02-12 Per discussione Daniele Zambelli
Il giorno lun 12 feb 2024 alle ore 09:27 Carlos Catucci ha scritto: > > [...] > E cosa ci sarebbe di strano? Se non gli passi un valore applica quello di > default. QUello che deve fare fa'. Lo strano per me è che il valore di default dovrebbe essere una lista vuota ogni volta che chiamo la funz

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

2024-02-12 Per discussione Daniele Zambelli
Il giorno lun 12 feb 2024 alle ore 08:47 Federico Fissore ha scritto: > > Ciao > > no, l'ultima funzione sta rivalorizzando `par` ogni volta. Cambiala così e > riesegui Ok, questo mi pare che riproduca la situazione: def prova(cambia, par=[]): if cambia: par.append('pippo')

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

2024-02-12 Per discussione Carlos Catucci
On Mon, 12 Feb 2024 at 00:10, Daniele Zambelli wrote: > Mi pare di avere capito, ma continua a risultarmi strano questo > comportamento: > > > Se il valore della variabile viene cambiata al momento della chiamata > della funzione, il valore di default rimane, se viene cambiata dalla > funzione st

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

2024-02-11 Per discussione Federico Fissore
Ciao no, l'ultima funzione sta rivalorizzando `par` ogni volta. Cambiala così e riesegui def prova(par=['pippo']): if par == ['pippo']: print("cambiata") par = ['pluto'] print(par) ciao federico On Mon, 12 Feb 2024 00:09:55 +0100 Daniele Zambelli wrote --- >

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

2024-02-11 Per discussione Daniele Zambelli
Mi pare di avere capito, ma continua a risultarmi strano questo comportamento: def prova(par='pippo'): print(par) prova('pluto') # pluto prova() # pippo def prova(par=['pippo']): print(par) prova(['pluto'])# ['pluto'] prova() # ['pippo'] def prova(par=['pippo'

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

2024-02-11 Per discussione Federico Fissore
Ciao Result é locale alla funzione ma il suo valore di default no: quel [] è una lista definita a livello di funzione, quindi definita una volta e condivisa da ogni invocazione. Se vuoi evitare sorprese, usa none come valore di default, e nella funzione metti If result is none: result = []

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

2024-02-11 Per discussione Daniele Zambelli
Stavo studiando degli algoritmi per produrre la lista delle permutazioni di una sequenza, ho modificato una funzione che ho trovato su stackoverflow e mi sono imbattuto in un comportamento molto strano (per me). Lo script è questo: def permutazioni1(head, tail='', result=[]): if len(head) == 0