Notice
Recent Posts
Recent Comments
Link
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

study

Closure(중첩함수) 본문

python

Closure(중첩함수)

채승완 2020. 12. 8. 17:30

안녕하세요

 

python에서 고급 함수라고 불리는 closure에 대해서 알아보겠습니다

 

우선 closure 설명에 앞서 변수 사용 방법에 대해 설명하겠습니다

X는 전역 변수로 어느 지역에서나 사용할 수 있는 것을 말합니다

반대로 X는 지역 변수로 함수 안에서만 사용할 수 있습니다

 

그림에서 보시면 foo()는 지역 변수를 출력한 값이기 때문에 10이 나오지만

함수 밖에서 출력한 x는 전역 변수인 20으로 출력된 것을 알 수 있습니다

 

 

사진을 보시면 함수에서 정의한 X에 대해서는 출력이 가능하지만 함수 밖에서는 X가 출력이 되지 않는 것을 확인할 수 있다

 

그렇다면 함수 안에 있는 지역 변수를 전역 변수로 어떻게 바꿀 수 있을까요?

보시다시피 global을 적어주면 지역 변수가 전역 변수로 변경됩니다

 

X의 값을 20으로 변경한것 처럼 보이지만 출력 결과 10입니다

이유는 파이썬에서는 함수에서 변수를 만들면 항상 현재 함수의 지역 변수가 됩니다

 

X는 A의 지역변수, X는 B의 지역 변수입니다

 

그렇다면 현재함수 바깥쪽에 있는 지역 변수의 값을 변경하는 방법은 무엇일까요?

 

nonlocal을 사용하게 되면 함수 B에서 x는 더 이상 함수 B의 지역 변수가 아닌 함수 A의 지역 변수가 됩니다

 

nonlocal는 가장 가까운 함수를 먼저 찾습니다

즉 C의 nonlocal에서 x는 함수 B의 지역 변수로 사용이 되며 y는 함수 B에서 y가 없어 함수 A를 지역 변수로 사용하게 된다

 

global 키워드를 사용하면 함수가 몇 단계든 상관없이 전역 변수를 사용하게 됩니다

 

Closure란

중첩 함수 또는 내부 함수(Inner function)는 말 그대로 함수 내에 또 다른 함수가 있는 것을 말합니다. 아래와 같이 말이죠.

return a * x + b에서는 함수 바깥쪽에 있는 지역 변수 a와 b를 사용하여 계산합니다

함수 mul_add를 만든 뒤에는 이 함수를 바로 호출하지 않고 return으로 함수 자체를 반환합니다(함수를 반환할 때는

함수 이름만 반환해야 하며 ( )(괄호)를 붙이면 안 됩니다)

 

클로저의 개념

 

이처럼 클로저를 사용하면 프로그램의 흐름을 변수에 저장할 수 있습니다. 즉, 클로저는 지역 변수와 코드를 묶어서 사용하고 싶을 때 활용합니다(변수 수를 줄여 메모리 최소화)

또한, 클로저에 속한 지역 변수는 바깥에서 직접 접근할 수 없으므로 데이터를 숨기고 싶을 때 활용된다

'python' 카테고리의 다른 글

sort와 sorted의 차이  (0) 2020.12.10
lambda  (0) 2020.12.09