[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:
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

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 = []

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.

2024-02-11 Per discussione Gabriele Battaglia

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

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']):
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

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 --- 
 > 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.

2024-02-11 Per discussione Daniele Zambelli
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