<div dir="ltr"><div dir="ltr"><div class="gmail_default" style="font-family:arial,sans-serif;font-size:small"><span style="font-family:Arial,Helvetica,sans-serif">Il giorno lun 12 feb 2024 alle ore 09:36 Daniele Zambelli <<a href="mailto:daniele.zambelli@gmail.com">daniele.zambelli@gmail.com</a>> ha scritto:</span><br></div></div><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Lo strano per me è che il valore di default dovrebbe essere una lista<br>
vuota ogni volta che chiamo la funzione invece la seconda volta è una<br>
lista con i valori che sono stati inseriti dalla funzione nella<br>
chiamata precedente.<br>
Cioè due chiamate identiche della funzione hanno effetti differenti.<br>
Mi pare che non rispetti il principio di non side effect (se si dice così).<br></blockquote><div><br></div><div><div class="gmail_default" style="font-family:arial,sans-serif;font-size:small">Daniele,</div><div class="gmail_default" style="font-family:arial,sans-serif;font-size:small">il non side effect non si applica quando il valore di default di un parametro è un mutable (lista o set o dict).</div><div class="gmail_default" style="font-family:arial,sans-serif;font-size:small">Pensa che a volte si usa questo per memoizzare brutalmente una funzione.<br><br></div><div class="gmail_default" style="font-family:arial,sans-serif;font-size:small">Esempio:<br><br></div><div class="gmail_default" style="font-family:arial,sans-serif;font-size:small">def quadrato(n, cache={}):</div><div class="gmail_default" style="font-family:arial,sans-serif;font-size:small"> try:</div><div class="gmail_default" style="font-family:arial,sans-serif;font-size:small"> return cache[n]</div><div class="gmail_default" style="font-family:arial,sans-serif;font-size:small"> except KeyError:</div><div class="gmail_default" style="font-family:arial,sans-serif;font-size:small"> pass</div><div class="gmail_default" style="font-family:arial,sans-serif;font-size:small"> print("calcolo")</div><div class="gmail_default" style="font-family:arial,sans-serif;font-size:small"> q = cache[n] = n*n</div><div class="gmail_default" style="font-family:arial,sans-serif;font-size:small"> return q</div><div class="gmail_default" style="font-family:arial,sans-serif;font-size:small"><br></div><div class="gmail_default" style="font-family:arial,sans-serif;font-size:small">>>> quadrato(10)<br>calcolo<br>100<br>>>> quadrato(10)<br>100<br></div><div class="gmail_default" style="font-family:arial,sans-serif;font-size:small"><br></div><div class="gmail_default" style="font-family:arial,sans-serif;font-size:small"><br></div><div class="gmail_default" style="font-family:arial,sans-serif;font-size:small">Ciao.<br>Marco.</div></div><div class="gmail_default" style="font-family:arial,sans-serif;font-size:small"><br></div></div></div>