Salve a tutti, sto usando con ragionevole soddisfazione del codice di questo tipo:¹
class TuDimmiCosaVuoiCheCiPensoIo(): def __init__(self, d): self._d = d self._pres = {} def __enter__(self): for key in self._d: if key in globals(): self._pres[key] = globals()[key] globals()[key] = self._d[key] def __exit__(self, type, value, traceback): for key in self._d: if key in self._pres and globals()[key] == self._d[key]: # Not changed - restore: globals()[key] = self._pres[key] a = "non ti sto mica salutando" print a with TuDimmiCosaVuoiCheCiPensoIo( {"a" : "ciao"} ): print a print a La soddisfazione sarebbe sterminata se non fosse che questo codice, giocando con "globals()", non funziona dall'interno di una funzione. Inoltre, mi piacerebbe (ma è secondario) che l'oggetto da associare ad un certo nome fosse generabile dinamicamente. Da quel che ho letto in giro, sospetto che i più esperti di voi stiano già aggrottando le sopracciglia ("non crederai mica di modificare locals(), ragazzino?!"), però ecco, magari avete qualche idea che a me non passerebbe neanche per la mente (N.B: mi è passato per la mente "eval("...")" al posto di "with...", e non mi piace). Avevo anche pensato che __enter__ potrebbe installare un sys.excepthook modificato che cattura le NameErrorException (e __exit__ ripristinare quello originale)... ma un conto è catturarle, un altro fornirle al codice l'oggetto relativo e farlo proseguire normalmente... grazie per qualsiasi consiglio. Pietro ¹ Per chi si stesse preoccupando per la mia mente malata: voglio potere scrivere codice che lavora sulle colonne di pandas.DataFrame riferendomi direttamente alle colonne con il loro nome, e magari stabilendo un filtering su una condizione prefissata, semplificando _enormemente_ il codice delle analisi econometriche che sviluppo con pandas/statsmodels. _______________________________________________ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python