기본 콘텐츠로 건너뛰기

라벨이 람다함수인 게시물 표시

[matplotlib]quiver()함수

[python] 클로저(Closure)

클로저(Closure) 다음 코드의 함수 first() 는 중첩함수 인 increse() 를 포함하는 외곽함수입니다. def first(x):     #(1) def increase(y):  #(3) return (x+y)   #(4) return increase(x) #(2) first(1) 2 위 코드에서 두 개의 변수 x 와 y 는 각각 비지역변수 그리고 지역변수가 됩니다. 이 함수의 동작과정은 다음과 같습니다. first 함수에 인수 x 값 전달 본문에서 중첩함수를 사용할 동인이 없으므로 바로 return() 함수를 실행 인수 x 에 1을 전달하면서 중첩함수 increase() 호출 중첩함수에 전달된 인수 x 는 지역변수 y값이 됩니다. 그러므로 x 와 y 모두 1이 됩니다. increase() 함수 실행으로 비지역변수( x )와 지역변수( y )의 합을 실행 사실 위 함수는 x 의 선언에 의해 y 가 결정되는 구조로 다음과 같이 간단히 작성할 수 있습니다. def first0(x): return (x+x) first0(1) 2 위와 같이 지역변수가 비지역변수에 의해 결정되는 구조에서는 중첩함수에 인수를 독립적으로 전달 또는 변경할 수 없습니다. 이것은 중첩함수의 인수가 외부함수 내부에서 선언되고 그 인수가 외부함수의 인수에 좌우되기 때문입니다. 대신에 비지역과 지역 변수가 외부함수의 호출과 함께 동시에 전달된다면 이 두 변수 값들은 독립적으로 사용될 수 있습니다. 그러나 함수 first()에 전달할 인수가 1개이므로 first()함수 구조로 중첩함수 increase() 내의 인수를 독립적으로 적용할 수 없습니다. 대신에 다음에 정의한 first1() 함수의 경우 중첩함수의 인수를 독립적으로 사용할 수 있습니다. def first1(x): def increase(y): return (x+y) return increase...