Python 스크립트 중간에있는 모든 변수를 지우려면 어떻게해야합니까?
Matlab의 'clear'와 유사한 것을 찾고 있습니다. 작업 공간에서 모든 변수를 제거하고 시스템 메모리에서 해제하는 명령 / 함수입니다. 파이썬에 그런 것이 있습니까?
편집 : 어느 시점에서 모든 변수를 지우는 스크립트를 작성하고 싶습니다.
다음 명령 시퀀스 는 현재 모듈에서 모든 이름을 제거 합니다.
>>> import sys
>>> sys.modules[__name__].__dict__.clear()
"모든 이름"에는 모든 내장 기능이 포함되어 있기 때문에 실제로이 작업을 수행하고 싶지 않은 것 같습니다. 따라서 이러한 전체 삭제 후에 수행 할 수있는 작업이 많지 않습니다. 파이썬에는 실제로 "변수"와 같은 것이 없습니다. 많은 종류의 객체 (모듈, 함수, 클래스, 숫자, 문자열, ... 포함)가 있고 객체에 바인딩 된 이름 이 있습니다. 시퀀스가하는 일은 모듈에서 모든 이름을 제거하는 것입니다 (해당 객체는 해당 객체에 대한 모든 참조가 방금 제거 된 경우에만 사라집니다).
좀 더 선택적이고 싶을 수도 있지만 더 구체적으로 말하고 싶지 않으면 정확히 무슨 뜻인지 추측하기 어렵습니다. 그러나 예를 들면 다음과 같습니다.
>>> 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
매번 절 에 다시 바인딩 되므로) 제어 변수의 이름을 지정하는 것이 좋습니다. _
예를 들어 "그것은 special "(플러스, 인터랙티브 인터프리터에서 이름 _
은 프롬프트에 입력 된 모든 완전한 표현 후에 그 표현의 값에 다시 바인딩되므로 오래 머 무르지 않을 것입니다 ;-).
당신이 정확히 무엇을 결정했으면 어쨌든, 이다 당신이 원하는, 그것은 목적 함수를 정의하고 ((만 대화 형 세션에서 원하는 경우) 시작 파일에 넣어 또는 사이트 사용자 정의 파일 어렵지 않다 모든 스크립트에서 원하는 경우).
아니요, 통역사를 다시 시작하는 것이 가장 좋습니다.
Ipython 은 번들로 제공되는 인터프리터의 훌륭한 대체품 %reset
이며 일반적으로 작동 하는 명령이 있습니다.
함수를 작성하면 일단 그대로두면 모든 이름이 사라집니다.
이 개념은 네임 스페이스 라고 불리며 매우 훌륭해서 Zen of Python이되었습니다 .
네임 스페이스는 훌륭한 아이디어 중 하나입니다. 더 많은 작업을 수행해 보겠습니다!
IPython의 네임 스페이스도 마찬가지로 magic 명령으로 재설정 할 수 있습니다 %reset -f
. ( -f
이는 "강제"를 의미합니다. 즉, "정말 모든 변수를 삭제할 것인지 묻지 말고 그냥 실행하십시오.")
from IPython import get_ipython;
get_ipython().magic('reset -sf')
이것은 Alex의 대답의 수정 된 버전입니다. 다음 두 가지 방법을 사용하여 모듈의 네임 스페이스 상태를 저장하고 복원 할 수 있습니다.
__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
saveContext ()를 호출하기 전에 "clear = restoreContext"줄을 추가 할 수도 있으며 clear ()는 matlab의 clear처럼 작동합니다.
Spyder에서 각 Python 파일에 대한 IPython 콘솔을 구성하여 Menu에서 각 실행 전에 모든 변수를 지울 수 Run -> Configuration -> General settings -> Remove all variables before execution
있습니다.
유휴 IDE에는 Shell / Restart Shell이 있습니다. Cntrl-F6이이를 수행합니다.
The globals()
function returns a dictionary, where keys are names of objects you can name (and values, by the way, are id
s of these objects) The exec()
function takes a string and executes it as if you just type it in a python console So, the code is
for i in list(globals().keys()):
exec('del {}'.format(i)) if i[0] != '_' else None
Here else None
is added to follow python syntax. This code doesn't look beutiful, but it's short. The better way to write it is
for i in list(globals().keys()):
if(i[0] != '_'):
exec('del {}'.format(i))
'developer tip' 카테고리의 다른 글
C #이 두 개의 int 배열 구문에서 다르게 작동하는 이유 (0) | 2020.11.05 |
---|---|
대체 사전을 사용하여 문자열을 대체하는 가장 쉬운 방법은 무엇입니까? (0) | 2020.11.04 |
스트림에서 가져온 이미지 형식을 어떻게 알 수 있습니까? (0) | 2020.11.04 |
GIT-.suo 파일을 무시할 수 없습니다. (0) | 2020.11.04 |
Scala에서 HTTP 요청 수행 (0) | 2020.11.04 |