-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 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 Ma vedilo come curiosità accademica; io non userei una cosa del genere in del codice "reale". Ecco un esempio di utilizzo (supponendo che il codice sia salvato in un modulo slots.py: ## BEGIN CODE ## from slots import slots def test(): a = 'local original' datum = { 'a': 'local modified', 'b': 'global modified', 'c': 'global added' } with slots(datum): print 'in slots...' print a print b print c print 'outside slots...' print a print b print c b = 'global original' test() ## END CODE ## Eseguendolo, stampa: ## BEGIN SHELL ## in slots... local modified global modified global added outside slots... local original global original Traceback (most recent call last): File "slots_example.py", line 25, in <module> test() File "slots_example.py", line 21, in test print c NameError: global name 'c' is not defined ## END SHELL ## Ciao Manlio -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.10 (GNU/Linux) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/ iEYEARECAAYFAlGSdZsACgkQscQJ24LbaUQhigCfUZUVwTGVljTunRPA4U+Gh0O0 GgIAoI2FhcPZrOjJiO4rRl8dFGuEfmCi =59f5 -----END PGP SIGNATURE----- _______________________________________________ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python