Il giorno mar, 14/05/2013 alle 19.34 +0200, Manlio Perillo ha scritto: > Il 14/05/2013 17:37, Manlio Perillo ha scritto: > > [...] > > > > Con Python credo tu possa al massimo ottenere, abbastanza facilmente, > > qualcosa come: > > > > with obj.context(condizione) as d: > > d.x + d.y > > > > Non è possibile "iniettare" delle variabili locali. > > > > Dato che era un problema interessante, mi sono documentato meglio. > Usando un API specifica di CPython sembra sia possibile fare quello che > chiedi: > 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"! Non pago, ho provato ad investigare con un "import ipdb; ipdb.set_trace()" prima di queste due righe... e con ipdb, il NameError scompare! 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!) ciao, grazie Pietro _______________________________________________ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python