Python

[Python] 중첩함수, First class Function, Closure, 데코레이터

파리외 개발자 2022. 4. 5. 18:58

중첩함수

 

위 두줄에만 집중해보자면 out_func라는 함수를 정의하고 그 안에 in_func라는 내부 함수를 정의해줬다.

이게 중첩함수다. 

함수안에 정의된 내부함수인 in_func는 전역변수 취급으로 out_func안에서만 작동하고 밖에서 사용하려고 하면 정의되지 않았다고 한다.

 

First-class function

 

마지막 줄처럼 함수를 변수에 지정할 수 있는것이 First class 함수의 특징이다.

또 다른 특징으로는 함수의 인자에 다른 함수를 넣을 수 있고, 함수의 리턴값에 함수를 넣을 수 있다는 것이 있지만 

그냥 함수를 객체로 보면 되고 파이썬의 모든 함수는 first class 함수라는 것을 알아둔다.

 

Closure

클로져 개념은 first class함수와 크게 다른 개념이 아니다. 함수와 그 안의 데이터를 저장해서 별도의 함수를 만드는 기법이다.

 

 

클로져를 통해 인자값의 저장과 내부함수 호출을 이뤄낼 수 있다.

함수의 순간상태를 변수에 넣고 동결시킨다는 개념으로 이해했다.

 

Decorator

위의 개념들을 이용해서 데코레이터를 작성, 적용해본다.

 

위와 비슷한 구조이지만 인자가 int에서 함수로 바뀌어서 작성되었다.

 

아래 두줄을 확인한다.

데코레이터라 주장하는 im_decorator 외부함수에 

데코를 원하는 i want deco함수가 인자로 들어간 것이 변수에 저장되었더니

내부함수인 deco를 덧입혀 나온 결과가 변수에 저장된 것을 알 수 있다.

 

아래의 두줄 대신 데코레이터를 목적 함수위에 붙여준다면

같은 결과가 나오게 된다.

즉 데코레이터는 내부함수에 정의된 코드들을 다른 함수의 앞뒤에 붙여주는(데코레이션) 해준다는 것이다.