-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Il 14/05/2013 22:24, Pietro Battiston ha scritto: > [...] >> http://pastebin.com/pc5i4V1u >> > > Sono estasiato. > > Che ci sia davvero sotto un sortilegio me lo ha dimostrato la seguente > cosa: ho provato a modificare il tuo codice in modo che le variabili di > "datum" venissero memorizzate come locali, invece che globali (sì, > confesso che è ipocrita fare il raffinato su un tale hack), e ne ho > avuto il seguente simpatico comportamento, nella parte "in slots...": > > print "c" in locals() # Stampa "True" > print c # "NameError: global name 'c' is not defined"! >
Questo succede perchè Python decide se una variabile è locale o globale quando il codice viene compilato. Quindi, come ti avevo già detto, non è possibile definire nuove variabili locali a run-time. Nel tuo caso, la variabile c è nel dizionario locals, ma non è nell'array interno usato da CPython per il lookup delle variabili locali. Però, in teoria, non ci sono ragioni per cui non debba essere possibile modificare le variabili locali esistenti (ad esempio, un debugger serio deve permettere di farlo); l'unico problema è che l'aggiornamento di locals() non garantisce quello che vogliamo, questo per permettere di ottimizzare l'accesso alle variabili locali. > Non pago, ho provato ad investigare con un "import ipdb; > ipdb.set_trace()" prima di queste due righe... e con ipdb, il NameError > scompare! > E cosa ottieni? Con pdb (il debugger standard), viene sempre lanciata l'eccezione. > Credo che mi ci vorrà un po' a capire veramente cosa sta succedendo... > >> Ma vedilo come curiosità accademica; io non userei una cosa del genere >> in del codice "reale". >> > > Non posso giurarti che resisterò... > (ma perlomeno puoi stare tranquillo che il progetto pandas non mi > accetterebbe mai del codice del genere!) > Mai sopravvalutare le persone... ;-) > ciao, grazie > Grazie a te, perchè ho capito meglio un aspetto di Python che non conoscevo molto bene. Ciao Manlio -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.10 (GNU/Linux) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/ iEYEARECAAYFAlGSoPwACgkQscQJ24LbaUTfzQCfYIb7tu31IzozxHfNBKb5SEVA SGYAni5pCvKPGJew2oJmFw6ea316WUNd =fWrw -----END PGP SIGNATURE----- _______________________________________________ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python