Следующая последовательность команд удаляет каждое имя из текущего модуля:
>>> import sys
>>> sys.modules[__name__].__dict__.clear()
Я сомневаюсь, что вы действительно хотите это сделать, потому что "каждое имя" включает в себя все построенные- так что после такого полного уничтожения мало что можно сделать.Помните, в Python действительно нет такой вещи как «переменная» - есть объекты , самых разных (включая модули, функции, класс, числа, строки, ...), и есть имена , привязанные к объектам;последовательность удаляет каждое имя из модуля (соответствующие объекты исчезают, если и только если каждая ссылка на них только что была удалена).
Может быть, вы хотите быть более избирательным, но трудно угадатьименно то, что вы имеете в виду, если вы не хотите быть более конкретным.Но просто для примера:
>>> import sys
>>> this = sys.modules[__name__]
>>> for n in dir():
... if n[0]!='_': delattr(this, n)
...
>>>
В этой последовательности не учитываются имена, которые являются личными или магическими, включая специальное имя __builtins__
, в котором хранятся все встроенные имена.Итак, встроенные модули все еще работают - например:
>>> dir()
['__builtins__', '__doc__', '__name__', '__package__', 'n']
>>>
Как вы видите, имя n
(управляющая переменная в этом for
) также случайно залипает (поскольку оно связано)в предложении for
каждый раз через), поэтому, возможно, было бы лучше назвать эту управляющую переменную _
, например, чтобы ясно показать, что она «особенная» (плюс, в интерактивном интерпретаторе имя _
повторнов любом случае после каждого полного выражения, введенного в приглашении, привязывается к значению этого выражения, чтобы оно не задерживалось на долгое время; что вы хотите сделать, нетрудно определить функцию для этой цели и поместить ее в свой стартовый файл (если вы хотите это только в интерактивных сеансах) или в файл настройки сайта (если вы хотите, чтобы это было в каждом скрипте).