2010/7/15 Nicola Zanella <ing.za...@gmail.com> > Ciao a tutti, scrivo perchè uso molto spesso il metodo setdefault dei dict, > però anche googlando non sono riuscito a capire > perchè quando come value si mette il valore di ritorno di una funzione, > essa venga rieseguita ogni volta. > > Esempio: > > >>> a = {} > >>> a > {} > >>> def fun1(): > ... print 'passed' > ... return 3 > ... > >>> a.setdefault(1, fun1()) > passed > 3 > >>> a.setdefault(1, fun1()) > passed > 3 > >>> a.setdefault(1, fun1()) > passed > 3 > > Qualcuno lo sa? >
Certo: perché gli argomenti sono valutati al momento della chiamata della funzione: >>> def retl(): ... print "Ok" ... return [] ... >>> a = {} >>> a.setdefault(1, retl()).append(3) Ok >>> a {1: [3]} >>> a.setdefault(1, retl()).append(3) Ok >>> a {1: [3, 3]} Come vedi la funzione viene solo chiamata mentre il valore di ritorno viene poi ignorato. Tu vorresti una sorta di lazy evaluation degli argomenti che però non esiste che io sappia. Ciao. Marco. -- http://thinkcode.tv/gratis - Capire in 15 minuti cosa può fare Python http://stacktrace.it - Aperiodico di resistenza informatica http://python.thinkcode.tv - Videocorso di Python http://beri.it - Blog di una testina di vitello
_______________________________________________ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python