[Python] Questo, da Python, non me lo sarei mai aspettato
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
Re: [Python] Questo, da Python, non me lo sarei mai aspettato
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 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 ___ Python mailing list Python@lists.python.it https://lists.python.it/mailman/listinfo/python
[Python] Un quesito su pip.
Ciao a tutti. Perdonate l'ignoranza estrema, vorrei capire il perchè di questa cosa. Fino ad oggi, se dal prompt di Win11 digitavo pip, potevo gestire i pacchetti installati. Dopo aver installato ed usato per qualche giorno anaconda, l'ho disinstallato ed ora dal prompt, pip non mi risponde più. Tuttavia lo fa se lo chiamo attraverso python: py -m pip . Anche pyinstaller: prima lo invocavo direttamente dal prompt, ora c'è solo se lo chiamo con py -m Qual è la differenza fra queste 2 invocazioni. C'è un modo migliore dell'altro? Perchè la rimozione di anaconda ha cambiato le cose? Grazie mille. -- Gabriele Battaglia (IZ4APU) --... ...-- -.. . .. --.. - .- .--. ..- - ..- . . Sent from my Giant Desktop PC ___ Python mailing list Python@lists.python.it https://lists.python.it/mailman/listinfo/python
Re: [Python] Questo, da Python, non me lo sarei mai aspettato
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 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 > > 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
Re: [Python] Questo, da Python, non me lo sarei mai aspettato
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']): > 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 > ___ Python mailing list Python@lists.python.it https://lists.python.it/mailman/listinfo/python
Re: [Python] Un quesito su pip.
Il giorno dom 11 feb 2024 alle ore 23:19 Gabriele Battaglia ha scritto: > > Ciao a tutti. > > Perdonate l'ignoranza estrema, vorrei capire il perchè di questa cosa. > > Fino ad oggi, se dal prompt di Win11 digitavo pip, potevo gestire i > pacchetti installati. > > Dopo aver installato ed usato per qualche giorno anaconda, l'ho > disinstallato ed ora dal prompt, pip non mi risponde più. > [...] Sono diversi anni che non uso Windows, per cui potrei dire delle vaccate... Forse Windows, quando hai disinstallato anaconda, ha tolto il collegamento tra il tipo di file e l'interprete, bisogna reimpostarlo magari attraverso il menu contestuale di pip scegliendo "apri con..." e scegliendo "usa sempre questa applicazione" (o qualcosa del genere). Ciao. -- 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