Я ищу что-то похожее на 'clear' в Matlab: команду / функцию, которая удаляет все переменные из рабочего пространства, освобождая их из системной памяти. Есть ли такая вещь в Python?
РЕДАКТИРОВАТЬ: Я хочу написать сценарий, который в какой-то момент очищает все переменные.
Следующая последовательность команд действительно удаляет каждое имя из текущего модуля:
>>> 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
) также остается -bound в предложении for
каждый раз), поэтому может быть лучше назвать эту управляющую переменную _
, например, чтобы ясно показать, что "она особенная" (плюс, в интерактивный интерпретатор, имя _
в любом случае перепривязывается после каждого полного выражения, введенного в приглашении, к значению этого выражения, поэтому он не будет задерживаться надолго ;-).
В любом случае, как только вы точно определили, что вы хотите сделать, несложно определить функцию для этой цели и поместить ее в файл запуска (если вы хотите, чтобы она была только в интерактивные сеансы) или файл настройки сайта (если вы хотите использовать его в каждом скрипте).
Нет, вам лучше перезапустить интерпретатор.
IPython является отличной заменой встроенного интерпретатора и имеет команду % reset
, которая обычно работает
Если вы напишете функцию, то, как только вы оставите ее, все имена внутри исчезнут.
Концепция называется namespace , и она настолько хороша, что вошла в Zen of Python :
Пространства имен - одна отличная идея - давай сделаем еще!
Пространство имен IPython также можно сбросить с помощью волшебной команды % reset -f
. ( -f
означает «сила»; другими словами, «не спрашивайте меня, действительно ли я хочу удалить все переменные, просто сделайте это».)