• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    해결됨

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

23.04.19 21:00 작성 23.04.19 21:17 수정 조회수 219

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