def a(b=[]):
b.append(1)
return b
print a()
print a()
갑자기 나는 2 개의 elems로리스트를 얻었지만 어떻게 될까? 매번 빈 목록으로 설정해서는 안됩니다.파이썬에서 클로저 질문을 이해하지 못한다
감사합니다.
def a(b=[]):
b.append(1)
return b
print a()
print a()
갑자기 나는 2 개의 elems로리스트를 얻었지만 어떻게 될까? 매번 빈 목록으로 설정해서는 안됩니다.파이썬에서 클로저 질문을 이해하지 못한다
감사합니다.
적어도 일상적인 의미에서 폐쇄와 관련이 없습니다.
b
의 기본값은 "새로운 빈 목록"이 아닙니다. "함수를 정의하면서 지금 방금 만든이 특정 객체를 빈 목록으로 초기화"합니다. 함수가 인수없이 호출 될 때마다 동일한 객체가 사용됩니다.
기본 인수는 함수가 정의 될 때 한 번만 평가됩니다. 한 번의 호출에서 다음 호출까지 동일한 객체를 유지하므로 동일한 목록이 계속 추가됩니다. None
의 기본값을 사용하고이를 확인하려면 대신 해당 값을 확인하십시오.
수정 된 버전이 다른 답변에 주어진 이유입니다 : 함수가 정의 될 때
def a(b=None):
b = [] if b is None else b
b.append(1)
return b
기본 인수가 평가된다 (한 번),하지 때마다 그것은이라고합니다.
이 시도 :
def a(b=None):
if b is None
b = []
b.append(1)
return b
print a()
print a()
참조 또한 http://stackoverflow.com/questions/1132941/least-astonishment-in-python-the-mutable-default-argument –