답변:
무슨 일이야 self.left = None
?
null
PHP에서는 그렇지 않습니다 . PHP에서 변수를 설정 null
하면 처음에 정의하지 않은 것처럼 대부분의 경우 비슷한 동작을 제공합니다. None
파이썬에서 값은 정의되지 않은 변수와는 다릅니다. 그러나 None
다른 대부분의 화신과 매우 흡사합니다 null
(적어도 더 자세한 세부 정보를 얻을 때까지).
None
당신이 지정되지 않은 유형의 다른 "일반"개체와 함께 할 수있는 : 그것의 문자열 표현을 인쇄, 저장, 그 용기에 그것에 몇 가지 메타 데이터를 확인을 ... 어쨌든, 당신은 "파이썬 널 위해 구글을 시도 않았다 동등한"? 나는 진지하다. 약간의 분석이 필요하지만 정보는 바로 거기에 있습니다.
print x
하고 Enter 키를 누릅니다. 정의되지 않은 변수를 인쇄하려고 할 때 대부분의 언어와 마찬가지로 인터프리터 오류가 발생합니다. 그러나 변수를 정의한 다음 없음으로 지우려고하면 print x
코드를 사용하여 단어 None
를 출력으로 생성합니다 . 나는 파이썬에 익숙하지 않아서 착각 할 수는 있지만 이것은 지워진 변수의 행동처럼 보이지 않습니다.
del
키워드는 할 것입니다.
>>> a=1
>>> a
1
>>> del a
>>> a
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'a' is not defined
하지만이 경우에 투표 self.left = None
del
존재하지 않는 변수를 삭제하려고하면 예외가 발생한다는 단점이 있습니다 . 일반적으로 바람직하지 않습니다.
type=…
입력 type(…)
한 다음 삭제하는 것이 원래 기능을 다시 얻는 가장 쉬운 방법 이라는 것을 지적하고 싶었습니다 . 즉, None으로 유지하면 기본 기능에 대한 액세스가 여전히 차단됩니다.
set = set(myList)
있고 더 이상 set을 함수 (doh)로 사용할 수 없다는 것을 알았습니다. 사용 del set
나를 FX로 다시 사용하는 것을 허용했다. 물론 실제 스크립트에서 예약 된 var를 사용하지는 않습니다.
var = None
"값을 지우고"변수 값을 "없음"과 같이 "널"로 설정하지만 변수에 대한 포인터는 그대로 유지됩니다.
del var
변수에 대한 정의를 완전히 제거합니다.
나중에 변수를 사용하려면 새 값을 설정하십시오. 즉, 변수를 유지하는 None
것이 좋습니다.
실제로는 변수 / 속성을 삭제하지 않습니다. 값을로 설정 None
하면 변수가 여전히 메모리의 공간을 차지합니다. 메모리에서 변수의 모든 존재를 완전히 지우려면 다음을 입력하십시오.
del self.left
clear
그렇지 않다고 말했다 remove
. del은 속성과 조회를 종료합니다. 확인할 수있는 것보다 None으로 설정하는 것이 더 깔끔 if self.left
하며 노드가 비어 있는지 확인하기에 충분합니다.
del
있다면 IMHO는 '정신적으로 파싱 할 때 변수를 잊어 버릴 수 있음을 더욱 분명하게 고려할 가치가 있다. ' 코드.
if self.left:
을 선호합니까? 아니면 어디서나 처리하지 않으면 프로그램을 중단시킬 수있는 NameError 예외를 처리하는 것을 선호합니까? ?
희망이 할 경우 완전히 삭제는 사용 del
:
del your_variable
또는 그렇지 않으면하는 값을 확인합니다None
:
your_variable = None
그것이 만약 반복 가능한 (예 : 목록 또는 튜플 등)을, 당신은 같은 비울 수 있습니다 :
your_variable.clear()
그런 다음 your_variable
비어있을 것입니다
변수를 삭제 하시겠습니까?
좋아, 나는 @bnul 답변에 가장 좋은 대안 아이디어가 있다고 생각한다.
다음을 사용하여 개별 이름을 삭제할 수 있습니다 del
.
del x
또는 globals () 객체에서 제거 할 수 있습니다.
for name in dir():
if not name.startswith('_'):
del globals()[name]
이것은 예제 루프 일뿐입니다. 그것은 밑줄로 시작하지 않는 이름 만 방어 적으로 삭제하고, 당신이 인터프리터에서 시작할 때 밑줄없이 이름 만 사용했다고 가정합니다. 당신이 정말로 철저히 원한다면 하드 코딩 된 이름 목록을 사용하여 대신 (허용 목록) 유지할 수 있습니다. 통역사를 종료하고 다시 시작하는 것 외에는 사용자를 위해 정리를 수행하는 내장 기능이 없습니다.
가져온 모듈 (import os)은 sys.modules에서 참조하기 때문에 가져온 상태로 유지됩니다. 후속 가져 오기는 이미 가져온 모듈 객체를 재사용합니다. 현재 글로벌 네임 스페이스에 대한 참조가 없습니다.
이 답변을 재고하십시오!
위에서 언급 한 몇 가지 옵션을 사용했습니다.
del self.left
또는 사용하여 값을 없음으로 설정
self.left = None
값을 없음으로 설정할 때 차이점을 알고 몇 가지 예외 처리기를 배치하는 것이 중요합니다. 템플릿을 사용하여 조건 문의 값을 인쇄하는 경우
print("The value of the variable is {}".format(self.left))
변수 인쇄 값 "변수 값이 없음"으로 표시 될 수 있습니다. 따라서 몇 가지 예외 처리기를 거기에 배치해야합니다.
if self.left:
#Then only print stuff
위의 명령은 self.left가 아닌 경우에만 값을 인쇄합니다 None