How do I clear all variables in the middle of a Python script?

How do I clear all variables in the middle of a Python script?

The following sequence of commands does remove every name from the current module:

>>> import sys
>>> sys.modules[__name__].__dict__.clear()

I doubt you actually DO want to do this, because every name includes all built-ins, so theres not much you can do after such a total wipe-out. Remember, in Python there is really no such thing as a variable — there are objects, of many kinds (including modules, functions, class, numbers, strings, …), and there are names, bound to objects; what the sequence does is remove every name from a module (the corresponding objects go away if and only if every reference to them has just been removed).

Maybe you want to be more selective, but its hard to guess exactly what you mean unless you want to be more specific. But, just to give an example:

>>> import sys
>>> this = sys.modules[__name__]
>>> for n in dir():
...   if n[0]!=_: delattr(this, n)
... 
>>>

This sequence leaves alone names that are private or magical, including the __builtins__ special name which houses all built-in names. So, built-ins still work — for example:

>>> dir()
[__builtins__, __doc__, __name__, __package__, n]
>>> 

As you see, name n (the control variable in that for) also happens to stick around (as its re-bound in the for clause every time through), so it might be better to name that control variable _, for example, to clearly show its special (plus, in the interactive interpreter, name _ is re-bound anyway after every complete expression entered at the prompt, to the value of that expression, so it wont stick around for long;-).

Anyway, once you have determined exactly what it is you want to do, its not hard to define a function for the purpose and put it in your start-up file (if you want it only in interactive sessions) or site-customize file (if you want it in every script).

No, you are best off restarting the interpreter

IPython is an excellent replacement for the bundled interpreter and has the %reset command which usually works

How do I clear all variables in the middle of a Python script?

If you write a function then once you leave it all names inside disappear.

The concept is called namespace and its so good, it made it into the Zen of Python:

Namespaces are one honking great idea
— lets do more of those!

The namespace of IPython can likewise be reset with the magic command %reset -f. (The -f means force; in other words, dont ask me if I really want to delete all the variables, just do it.)

Leave a Reply

Your email address will not be published. Required fields are marked *