[Python] Problema con la condivisione e l'utilizzo di un dict globale

lex mlist lexmlist a gmail.com
Sab 13 Nov 2010 12:48:25 CET


Il giorno 13 novembre 2010 12:19, Marco Giusti <marco.giusti a gmail.com> ha
scritto:

> On Sat, Nov 13, 2010 at 11:45:37AM +0100, lex mlist wrote:
> > Giorno,
> >
> > torno alla carica con un'altro problema (e chiedo scusa se vi stresso).
>
> no problem
>

=)) grazie mille per la risposta.


> [...]
>                                 global configuration # <<< here the trick
> [...]
> ``configuration`` fa parte dello scope globale, quando dentro la
> funzione setup tu fai l'assegnamento
>
>        configuration = yaml.load(open(self.filename))
>
> tu leghi (bind) il nome configuration allo scope locale. quando da
> dentro la funzione cerchi il nome ``configuration``, lui lo trova nello
> scope locale e ritorna quello, ovvero i parametri di configurazione, ma
> dal modulo ``error`` tu ottieni la variabile che è associata allo scope
> globale.
>

Accipicchia che comportamento "strano" :s
Non posso che chiedermi il perchè di un tale comportamento, si verifica solo
all'interno delle classi o in presenza di qualunque scope non globale?
(funzioni ed altro, se esiste)

Comunque grazie mille per l'aiuto, avevo davvero provato di tutto, anche ad
usare una classe al posto del dict ma il risultato finale è sempre stato lo
stesso.


> un piccolo extra che puoi ignorare se credi.

Nono, anzi tutt'altro, ogni informazione in più è utilissima :)) e ti
ringrazio in anticipo


> python mette a disposizione
> una variabile globale, ``__debug__``, che è sempre vera a meno di
> eseguire l'interprete python con le opzioni di ottimizzazione, -O. in
> quel caso crea dei file con bytecode ottimizzato .pyo, invece dei
> classici .pyc, inoltre è interessante come viene ottimizzato il codice:
>
>        import dis
>
>        def error(msg):
>                if __debug__:
>                        print msg
>
>        error('exception...')
>        dis.dis(error)
>
> prova a lanciare questo codice prima normalmente e poi con l'opzione -O.
>

Wow! Sinceramente ci speravo in una variabile tipo quella, anche se non ci
contavo troppo, a questo punto potrei usufruire della variabile __debug__,
visto che ottimizza anche il bytecode finale. Ho provato a ripetere
l'esempio con una variabile booleana "debug" e in nessun caso il codice
viene ottimizzato.
Mi sembra un ottimo compromesso aggiungere una semplice opzione -O per
ottenere un insieme di benefici.
L'opzione è da ripetere ad ogni esecuzione o basta la prima volta lasciando
poi i .pyo? (a me comunque non ha salvato alcun .pyo, magari lo farà quando
lo chiamano altri moduli)

Grazie ancora!
-------------- parte successiva --------------
Un allegato HTML è stato rimosso...
URL: http://lists.python.it/pipermail/python/attachments/20101113/f18bc5a3/attachment.htm 


Maggiori informazioni sulla lista Python