On Thu, 2010-07-15 at 12:11 +0200, Nicola Zanella wrote:

> 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?

Si', e' abbastanza chiaro. Tu chiami la funzione ogni volta che esegui
la defaultdict... e gli passi il valore di ritorno. Tra l'altro non sta
scritto da nessuna parte che che setdefault accetta un oggetto callable
(cosa che vorresti tu), a differenza del collections.defaultdict che
invece accetta come parametro una funzione che ritorna (o una classe che
istanzia) il valore di default.





Il contenuto e gli allegati di questo messaggio sono strettamente 
confidenziali, e ne sono vietati la diffusione, la riproduzione e l'uso non 
autorizzato. Il suo contenuto non costituisce impegno da parte della Società 
salvo accordo scritto tra quest'ultima ed il destinatario. Qualora il presente 
messaggio Le fosse pervenuto per errore, La preghiamo di comunicare 
immediatamente al mittente l'errata ricezione e di distruggere quanto ricevuto 
(compresi i file allegati) senza farne copia.
Qualsivoglia utilizzo non autorizzato del contenuto di questo messaggio 
costituisce violazione dell'obbligo di non rivelare il contenuto della 
corrispondenza tra altri soggetti, salvo più grave illecito, ed espone il 
responsabile alle relative conseguenze.

This e-mail (and any attachment(s)) is strictly confidential and for use only 
by intended recipient(s). Any use, distribution, reproduction or disclosure by 
any other person is strictly prohibited. The content of this e-mail does not 
constitute a commitment by the Company except where provided for in a written 
agreement between this e-mail addressee and the Company. If you are not an 
intended recipient(s), please notify the sender promptly and destroy this 
message and its attachments without reading or saving it in any manner.
Any non authorized use of the content of this message constitutes a violation 
of the obligation to abstain from learning of the correspondence among other 
subjects, except for more serious offence, and exposes the person responsible 
to the relevant consequences.

_______________________________________________
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python

Rispondere a