study
Closure(중첩함수) 본문
안녕하세요
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 |