Ripristinare lo stato delle variabili locali in Python

Esempio istruttivo che mostra come cancellare variabili in un programma Python
Quanto leggerete qui di seguito vi mostrera' alcune tecniche che raramente userete in codice di produzione, ma nonostante tutto sono di indubbio interesse le enormi potenzialita' che il linguaggio di programmazione mette a disposizione dei suoi utenti.


Utilizzeremo in questo esempio, una shell Python interattiva, ma il codice funzionera' altrettanto bene se lanciato dall'interprete.
Il nostro scopo e' definire un numero indefinito di nuove variabili e poi cancellarle. E' possibile ottenere un dizionario delle variabili locali usando la funzione builtin locals.
Subito dopo aver avviato la shell fotografiamo lo stato delle variabili locali, salvando le chiavi di suddetto dizionario in una variabile di nome oldlocals.

>>> oldlocals=locals().keys()

Definiamo ora alcune variabili nuove.

>>> a,b,c,d = 1,2,3,4

Il contenuto di locals sara' diversi ora:

>>> newlocals=locals().keys()
>>> oldlocals
['__builtins__', '__file__', '__name__', 'readline', 'rlcompleter', '__doc__']
>>> newlocals
['a', 'oldlocals', 'b', 'd', '__builtins__', '__file__', 'c', '__name__', 'readline', 'rlcompleter', '__doc__']

Per cancellare le variabili definite dopo la nostra "foto" possiamo usare le funzioni insiemistiche del tipo set.

>>> newly_defined=set(newlocals).difference(oldlocals).difference(set(('oldlocals',)))
>>> newly_defined
set(['a', 'c', 'b', 'd'])
>>> a,b,c,d
(1, 2, 3, 4)

Ora andiamo a cancellare le variabili che siamo andati a definire.

>>> for var in newly_defined: del(locals()[var])
...
>>> a,b,c,d
Traceback (most recent call last):
File "", line 1, in
NameError: name 'a' is not defined
>>>

Perfetto, ora le variabili a,b,c e d sono libere!

Il discorso si potrebbe approfondire con risvolti molto interessanti: ad esempio potrete eliminare solo le variabili di un determinato tipo o le istanze di una certa classe.
Lascio a voi tutto il divertimento.

Nessun commento: