<div class="gmail_quote">2010/7/15 Nicola Zanella <span dir="ltr">&lt;<a href="mailto:ing.zampa@gmail.com">ing.zampa@gmail.com</a>&gt;</span><br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">

Ciao a tutti, scrivo perchè uso molto spesso il metodo setdefault dei dict, però anche googlando non sono riuscito a capire<br>perchè quando come value si mette il valore di ritorno di una funzione, essa venga rieseguita ogni volta.<br>


<br>Esempio:<br><br>&gt;&gt;&gt; a = {}<br>&gt;&gt;&gt; a<br>{}<br>&gt;&gt;&gt; def fun1():<br>...     print &#39;passed&#39;<br>...     return 3<br>... <br>&gt;&gt;&gt; a.setdefault(1, fun1())<br>passed<br>3<br>&gt;&gt;&gt; a.setdefault(1, fun1())<br>


passed<br>3<br>&gt;&gt;&gt; a.setdefault(1, fun1())<br>passed<br>3<br><br>Qualcuno lo sa?<br></blockquote><div><br></div><div>Certo: perché gli argomenti sono valutati al momento della chiamata della funzione:</div><div>

<br></div></div><blockquote class="webkit-indent-blockquote" style="margin: 0 0 0 40px; border: none; padding: 0px;"><div class="gmail_quote"><div><div>&gt;&gt;&gt; def retl():</div></div></div><div class="gmail_quote"><div>

<div>...    print &quot;Ok&quot;</div></div></div><div class="gmail_quote"><div><div>...    return []</div></div></div><div class="gmail_quote"><div><div>... </div></div></div><div class="gmail_quote"><div><div>&gt;&gt;&gt; a = {}</div>

</div></div><div class="gmail_quote"><div><div>&gt;&gt;&gt; a.setdefault(1, retl()).append(3)</div></div></div><div class="gmail_quote"><div><div>Ok</div></div></div><div class="gmail_quote"><div><div>&gt;&gt;&gt; a</div>

</div></div><div class="gmail_quote"><div><div>{1: [3]}</div></div></div><div class="gmail_quote"><div><div>&gt;&gt;&gt; a.setdefault(1, retl()).append(3)</div></div></div><div class="gmail_quote"><div><div>Ok</div></div>

</div><div class="gmail_quote"><div><div>&gt;&gt;&gt; a</div></div></div><div class="gmail_quote"><div><div>{1: [3, 3]}</div></div></div></blockquote><div class="gmail_quote"><div><div><br></div></div><div>Come vedi la funzione viene solo chiamata mentre il valore di ritorno viene poi ignorato.</div>

<div><br></div><div>Tu vorresti una sorta di lazy evaluation degli argomenti che però non esiste che io sappia.</div><div><br></div><div>Ciao.<br>Marco.</div><div><br></div><div>-- </div></div><a href="http://thinkcode.tv/gratis">http://thinkcode.tv/gratis</a> - Capire in 15 minuti cosa può fare Python<br>

<a href="http://stacktrace.it">http://stacktrace.it</a> - Aperiodico di resistenza informatica<br><a href="http://python.thinkcode.tv">http://python.thinkcode.tv</a> - Videocorso di Python<br><a href="http://beri.it">http://beri.it</a> - Blog di una testina di vitello<br>

<br>