본문 바로가기

Python

중첩함수(nested function)와 클로저

1. 중첩함수 

 

일급함수(first-class) 란? 

  • 프로그래밍 언어가 함수를 '일급객체' 취급하는 것을 말합니다.   
  • python에서는 모든 것이 객체이므로, python의 함수는 First-class함수로 사용이 가능합니다.
  • 함수형 프로그래밍에서 고안된 기법입니다. python, GO, javascript, kotlin은 이를 지원합니다.(C , JAVA 등은 미지원)

       일급객체 라고하면

 

  1. 변수나 데이타에 할당 할 수 있어야 합니다. 
  2. 객체의 인자로 넘길 수 있어야 합니다.
  3. 객체의 리턴값으로 리턴 할수 있어야 합니다.

 

   즉 , 중첨함수란 

 

  • 단어그대로 함수 안에 또 다른 함수가 선언되어 있는 것 입니다. 
  • 중첩 함수는 해당 함수가 정의된 함수 내에서 호출 및 리턴이 가능합니다.
  • 함수 안에 선언된 변수(로컬 변수)는 함수 안에서만 사용 가능한 원리와 동일합니다.

 

1. 중첩함수 설정.

2. 안 쪽 함수 : 내부함수이자 위의 예시에서 inner_func() & 상위 부모함수 안에서만 호출 가능 => 부모함수를 벗어나서는 호출 불가

3. 중첩함수가 부모함수의 변수나 정보를 중첩함수 내에서 사용

4. 부모함수는 return 값으로 중첩함수 반환 즉, 중첩함수의 return 값 반환합니다. 예시에서는 inner func 반환. 

5. 부모함수의 return 값으로 중첩함수가 선언되었기 때문에 부모함수의 변수, 즉 local 영역의 변수는 외부에서 직 접적으로 접근이 불가능. 그렇지만 중첩함수를 통해서 사용 가능.

6. 위에서 6행 return값에 child_function() 괄호가 붙어있음
함수 자체가 아닌 내부함수의 리턴값을 반환하는 함수는 nested function(중첩함수).

 

 

 

 

 

2. 클로저(Closure)

 

 

※ 함수와 해당 함수가 가지고 있는 데이터를 함께 복사, 저장해서 별도의 함수로 사용하는 기법으로 First-class함수와 동일합니다. ※

 

 

사용 되는 곳

  • 콜백 함수에 사용
  • 지연된 평가
  • 데코레이터 함수

 

  • nested function과 다른 점은 위 예시에서처럼 부모함수의 리턴값이 내부함수의 값이 아닌 내부함수 자체를 반환.
  • 사용 방법 : 클로져가 있을 때, 부모함수를 새로운 변수에 선언해주면 그 변수에는 내부함수의 주소값이 담기기 때문에 그 변수에 ()를 붙여서 함수로서 다시 호출해주는 것.

 

 

   

 

 

 

 

 

 

 

 

 

Reference :

https://medium.com/@lazysoul/functional-programming-%EC%97%90%EC%84%9C-1%EA%B8%89-%EA%B0%9D%EC%B2%B4%EB%9E%80-ba1aeb048059

https://spidyweb.tistory.com/361

https://journeytosth.tistory.com/64

https://velog.io/@maxkmh/Python-09-Nested-Function-Closure-Decorator

 

 

 

'Python' 카테고리의 다른 글

데코레이터 (Decorator)  (0) 2022.07.15
지역변수와 전역변수  (0) 2022.06.28
이중 FOR문에 관하여  (0) 2022.05.06
Python SET  (0) 2022.05.06
딕셔너리 (dict)  (0) 2022.05.06