[Python] setdefault nei dict

2010-07-15 Per discussione Nicola Zanella
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?

Grazie, ciao
Nicola
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] setdefault nei dict

2010-07-15 Per discussione Marco Mariani
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


Re: [Python] setdefault nei dict

2010-07-15 Per discussione Marco Beri
2010/7/15 Nicola Zanella 

> 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


Re: [Python] setdefault nei dict

2010-07-15 Per discussione Daniele Varrazzo
On Thu, 15 Jul 2010 12:11:47 +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?

La stai eseguendo tu "a mano" scrivendo "fun1()", con le parentesi.

Prova a.setdefault(1, fun1)

Ciao!

-- 
Daniele Varrazzo - Develer S.r.l. 
http://www.develer.com
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] setdefault nei dict

2010-07-15 Per discussione Marco Mariani
On Thu, 2010-07-15 at 12:30 +0200, Daniele Varrazzo wrote:


> La stai eseguendo tu "a mano" scrivendo "fun1()", con le parentesi.
> 
> Prova a.setdefault(1, fun1)


In questo modo avrai alcuni (se non tutti) i valori del dizionario che
sono oggetti callable e vanno valutati al momento dell'utilizzo:

a[1]()

Se i tipi degli altri valori sono oggetti "semplici" e non callable,
puoi anche estendere la classe dict e modificare __getitem__ in modo che
valuti i valori che vuoi siano lazy:


> >>> class mydict(dict):
> ... def __getitem__(self, k):
> ... v = dict.__getitem__(self, k)
> ... if callable(v):
> ... return v()
> ... else:
> ... return v
> ... 
> >>> 
> >>> 
> >>> d1 = dict()
> >>> d1[1] = lambda: 4
> >>> d1[2] = 5
> >>> 
> >>> d2 = mydict()
> >>> d2[1] = lambda: 4
> >>> d2[2] = 5
> >>> 
> >>> 
> >>> print d1[1], d1[2]
>  at 0xb76bc764> 5
> >>> print d2[1], d2[2]
> 4 5







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


Re: [Python] setdefault nei dict

2010-07-15 Per discussione Marco Beri
2010/7/15 Daniele Varrazzo 

> La stai eseguendo tu "a mano" scrivendo "fun1()", con le parentesi.
>  Prova a.setdefault(1, fun1)
>

Così però dai per scontato che Nicola volesse settare come valore funzione.

Io pensavo volesse settare il valore di ritorno.

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


[Python] pywebkit

2010-07-15 Per discussione fabrizio fortunato
Ciao a tutti,
sapete dove trovare della documentazione per
pywebkit, ovvero i binding di python per webkit. Specifico che dovrei
utilizzarlo con GTK magari se esiste qualche guida mirata per questo.
Grazie

Fabrizio Fortunato

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


Re: [Python] setdefault nei dict

2010-07-15 Per discussione Daniele Varrazzo
On Thu, 15 Jul 2010 12:48:48 +0200, Marco Beri 
wrote:
> 2010/7/15 Daniele Varrazzo 
> 
>> La stai eseguendo tu "a mano" scrivendo "fun1()", con le parentesi.
>>  Prova a.setdefault(1, fun1)
>>
> 
> Così però dai per scontato che Nicola volesse settare come valore
> funzione.
> 
> Io pensavo volesse settare il valore di ritorno.

Ho solo visto che si chiedeva come mai una funzione veniva chiamata ogni
volta... quando era lui che la chiamava.

Probabilmente quello che cerca è collections.defaultdict come gli hanno
già detto.

-- 
Daniele Varrazzo - Develer S.r.l. 
http://www.develer.com
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


[Python] e32dbm

2010-07-15 Per discussione Vittorio Zuccala'
Buona sera a tutti,
mi sto incautamente buttando su python su nokia.
Ho installato l'interprete sul cellulare e riesco ad usare l'IDE su
cellulare.
Non ho ancora capito come usare l'SDK ma questo è un altro problema

L'applicazione che ho in mente fa uso di un database ed ho visto che
nativamente viene gestito l'e32dbm...
Qualcuno ha idea se esiste qualche applicazione per Windows o Linux per
leggere questi files?
In pratica vorrei immagazzinare delle informazioni tramite cellulare con
python-e32dbm e poi copiare il file su PC e analizzare i dati...

Grazie,
Vittorio
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python