[Python] setdefault nei dict

Marco Beri marcoberi a gmail.com
Gio 15 Lug 2010 12:30:15 CEST


2010/7/15 Nicola Zanella <ing.zampa a 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
-------------- parte successiva --------------
Un allegato HTML è stato rimosso...
URL: http://lists.python.it/pipermail/python/attachments/20100715/64af2adb/attachment.htm 


Maggiori informazioni sulla lista Python