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']):
    if par == ['pippo']:
        par = ['pluto']
    print(par)

prova()             # ['pluto']
prova()             # ['pluto']

Se il valore della variabile viene cambiata al momento della chiamata
della funzione, il valore di default rimane, se viene cambiata dalla
funzione stessa il valore di default cambia in tutte le chiamate
successive.

Grazie, ciao.

Il giorno dom 11 feb 2024 alle ore 18:12 Federico Fissore
<feder...@fissore.org> ha scritto:
>
> 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 = []
>
> Ciao
>
> Federico
>
>
>
> > On 11 Feb 2024, at 16:32, Daniele Zambelli <daniele.zambe...@gmail.com> 
> > 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:
> >
> > def permutazioni1(head, tail='', result=[]):
> >    if len(head) == 0:
> >        result.append(tail)
> >    else:
> >        for i in range(len(head)):
> >            permutazioni1(head[:i] + head[i+1:], tail + head[i])
> >        else:
> >          return(result)
> >
> > print(permutazioni1("abc"))
> >
> > print('---------------------')
> >
> > print(permutazioni1("def"))
> >
> > Io mi aspettavo che il parametro "result" fosse locale alla funzione
> > "permutazioni1" e che non mantenesse il suo contenuto tra una chiamata
> > e l'altra della funzione il risultato dello script è:
> >
> > ['abc', 'acb', 'bac', 'bca', 'cab', 'cba']
> > ---------------------
> > ['abc', 'acb', 'bac', 'bca', 'cab', 'cba', 'def', 'dfe', 'edf', 'efd',
> > 'fde', 'fed']
> >
> > Probabilmente non è il modo corretto per ottenere la lista delle
> > permutazioni, ma qualcuno sa spiegarmi perché si comporta così e come
> > eventualmente correggerlo?
> >
> > Grazie, da una domenica uggiosa.
> >
> > --
> >
> > Daniele
> >
> > www.matematicadolce.eu
> >
> > Perché la scuola,
> > invece di essere un luogo dove ci si allena a imparare,
> > è un luogo dove si fa finta di sapere?
> > _______________________________________________
> > Python mailing list
> > Python@lists.python.it
> > https://lists.python.it/mailman/listinfo/python
>


-- 

Daniele

www.matematicadolce.eu

Perché la scuola,
invece di essere un luogo dove ci si allena a imparare,
è un luogo dove si fa finta di sapere?
_______________________________________________
Python mailing list
Python@lists.python.it
https://lists.python.it/mailman/listinfo/python

Rispondere a