<div class="gmail_quote">2010/7/15 Nicola Zanella <span dir="ltr"><<a href="mailto:ing.zampa@gmail.com">ing.zampa@gmail.com</a>></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>>>> a = {}<br>>>> a<br>{}<br>>>> def fun1():<br>... print 'passed'<br>... return 3<br>... <br>>>> a.setdefault(1, fun1())<br>passed<br>3<br>>>> a.setdefault(1, fun1())<br>
passed<br>3<br>>>> 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>>>> def retl():</div></div></div><div class="gmail_quote"><div>
<div>... print "Ok"</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>>>> a = {}</div>
</div></div><div class="gmail_quote"><div><div>>>> 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>>>> a</div>
</div></div><div class="gmail_quote"><div><div>{1: [3]}</div></div></div><div class="gmail_quote"><div><div>>>> 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>>>> 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>