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

Rispondere a