Как очистить все переменные в середине скрипта Python?
Я ищу что-то похожее на "clear" в Matlab: команда/функция, которая удаляет все переменные из рабочей области, освобождая их из системной памяти. Есть такая вещь в Python?
EDIT: я хочу написать скрипт, который в какой-то момент очищает все переменные.
6 ответов:
следующая последовательность команд удаляет каждый name из текущего модуля:
>>> 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предложение каждый раз через), поэтому может быть лучше назвать эту управляющую переменную_, например, чтобы четко показать "это особенное "(плюс, в интерактивном интерпретаторе, имя_повторно привязывается в любом случае после каждого полного выражения, введенного в командной строке, к значение этого выражения, так что он не будет торчать долго;-).в любом случае, как только вы точно определили, что это и вы хотите сделать, нетрудно определить функцию для этой цели и поместить ее в свой файл запуска (если вы хотите ее только в интерактивных сеансах) или файл настройки сайта (если вы хотите ее в каждом скрипте).
нет, вам лучше перезапустить интерпретатор
Ipython является отличной заменой для прилагаемого интерпретатора и имеет
%resetкоманда, которая обычно работает
Если вы пишете функцию, то как только вы оставите его все имена внутри исчезают.
концепция называется пространство имен и это так хорошо, что он сделал это в Дзен питона:
пространства имен-это одна отличная идея -- давайте сделаем больше!
пространство имен IPython также можно сбросить с помощью команды magic
%reset -f. (Тег-fозначает "сила"; другими словами, " Не спрашивайте меня, действительно ли я хочу чтобы удалить все переменные, просто сделайте это.")
Это модифицированная версия ответа Алекса. Мы можем сохранить состояние пространства имен модуля и восстановить его с помощью следующих 2 методов...
__saved_context__ = {} def saveContext(): import sys __saved_context__.update(sys.modules[__name__].__dict__) def restoreContext(): import sys names = sys.modules[__name__].__dict__.keys() for n in names: if n not in __saved_context__: del sys.modules[__name__].__dict__[n] saveContext() hello = 'hi there' print hello # prints "hi there" on stdout restoreContext() print hello # throws an exceptionвы также можете добавить строку "clear = restoreContext" перед вызовом saveContext() и clear() будет работать как clear matlab.
в Spyder можно настроить консоль IPython для каждого файла Python, чтобы очистить все переменные перед каждым выполнением в меню
Run -> Configuration -> General settings -> Remove all variables before execution.
Comments