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")
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 = '
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
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
> [...
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
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:
>
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
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')
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
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 ---
>
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'
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 = []
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
13 matches
Mail list logo