인프런 커뮤니티 질문&답변

한영진님의 프로필 이미지
한영진

작성한 질문수

우리를 위한 프로그래밍 : 파이썬 중급 (Inflearn Original)

클로져를 학습 중에 궁금한게 생겨 질문드립니다

해결된 질문

작성

·

258

·

수정됨

1

#1

def clos():

  series = []

  def averager(v):

    series.append(v)

    return sum(series) / len(series)

  return averager

avg_clos = clos()

print(avg_clos(10))

print(avg_clos(20))

print(avg_clos(30))

#2

def clos():

  a = 0

  b = 0

  def averager(v):

    a += v

    b += 1

    return a / b

  return averager

avg_clos = clos()

print(avg_clos(10))

print(avg_clos(20))

print(avg_clos(30))

 

 

series든 a,b든 변수에 할당하고 수정하는건 같은데 왜 #2번만 nonlocal을 적용해야 실행이 되는 건지 잘모르겠습니다 . ㅠ.ㅠ

답변 1

0

좋은사람님의 프로필 이미지
좋은사람
지식공유자

네 안녕하세요.

#1 예제와는 다르게 #2 예제에서는 일반 변수에

+= -> 할당과 선언이 다시 이루어지므로, nonlocal을 사용해야 합니다.

아래 링크도 한 번 읽어보시고 예제 따라해보세요(번역기능 활용도 좋아요)

https://www.programiz.com/python-programming/closure

한영진님의 프로필 이미지
한영진

작성한 질문수

질문하기