잘못된 클로저 사용 예시에서 궁금한 점이 있습니다.
def closure_ex1(): series = [] def averager(v): series.append(v) print(f'입력된 값>> {series} / {len(series)}') return sum(series) / len(series) return averager ex = closure_ex1() print(ex(3)) print(ex(5)) 먼저 자유 변수로 series란 리스트를 사용해 값을 누적해 평균을 구하고자 한 방법입니다. def closure_ex2(): cnt = 0 total = 0 def averager(v): cnt += 1 total += v print(f'입력 값 >> {total} / {cnt}') return total/cnt return averager ex2 = closure_ex2() print(ex2(3)) print(ex2(5)) 그리고 cnt, total이란 자유 변수를 사용해 값을 누적해 평균을 구하고자 한 방법입니다. 제가 자유 변수를 이해한 바로는 바깥 함수에서 정의된 변수를 안쪽의 함수가 사용하는 경우로, 값을 변경하지 않을 경우 UnboundLocalError 오류가 발생하지 않습니다. (이해한 바가 잘못되었다면 알려주세요.) 두 번째 경우에서만 할당 전에 참조되었다는 UnboundLocalError 오류가 나는 것은 안쪽의 함수, 즉 averager 함수 내에서 자유 변수인 cnt의 값을 변경하였기 때문인가요?(cnt += 1 부분) 그래서 nonlocal cnt, total로 선언하여 averager 함수의 지역 변수가 아니라는 것을 알려주는 건가요? 만약 자유 변수로 선언한 cnt의 값을 변경하였기 때문에 오류가 나는 것이 맞다면 series란 리스트를 사용한 방법의 경우는 series.append()하여 리스트에 데이터를 추가하였지만 이것이 값을 변경하는 의미는 아닌 건가요? 질문이 길어졌네요^_^;;; series 리스트를 사용한 방식과 다르게 cnt, total 이란 변수를 선언해 재할당하는 방법에서만 오류가 나는 이유를 아직 명확하게 이해하지 못해 질문드립니다.