Python Study

1. Closure, Decorator, Generator

Louis.T.Kim 2020. 2. 29. 01:08

 

*First Class Function :

 - 함수를 변수처럼, Object처럼 쓴다.

 

[LINK] http://schoolofweb.net/blog/posts/%ED%8C%8C%EC%9D%B4%EC%8D%AC-%ED%8D%BC%EC%8A%A4%ED%8A%B8%ED%81%B4%EB%9E%98%EC%8A%A4-%ED%95%A8%EC%88%98-first-class-function/

 

*Closure :

     1) Function 안에 Function.

     2) 변수, 메모리 등을 효율적으로 사용할 수 있다.

     3) 클로저는 함수의 프리변수 값을 어딘가에 저장한다.

     4) 클로저는 이렇게 하나의 함수로 여러가지의 함수를 간단히 만들어낼 수 있게도 해주며, 기존에 만들어진 함수나 모듈등을 수정하지 않고도 wrapper 함수를 이용해 커스터마이징할 수 있게 해주는 기특한 녀석입니다. (ex. <h1> HeadLine <h1> )

[LINK] http://schoolofweb.net/blog/posts/%ED%8C%8C%EC%9D%B4%EC%8D%AC-%ED%81%B4%EB%A1%9C%EC%A0%80-closure/

 

*Free Variable : 

 - Global/Local Variable과 달리 Define되지 않고 쓰인 Variable (Closure가 생성되는 당시 Mapping 된다.)

 

[LINK] https://www.quora.com/What-is-the-difference-between-a-global-and-free-variable-in-Python

 

*Decorator :

     1) Closure 이용해서 함수 호출 전후로 logging 등을 할 수 있음

     2) 일반적으로 데코레이터는 로그를 남기거나 유저의 로그인 상태등을 확인하여 로그인 상태가 아니면 로그인 페이지로 리더랙트(redirect)하기 위해서 많이 사용됩니다. 또한 프로그램의 성능을 테스트하기 위해서도 많이 쓰입니다. 리눅스나 유닉스 서버 관리자는 스크립트가 실행되는 시간을 측정하기 위해서 다음과 같은 date와 time 명령어를 많이 사용합니다.

 

 

 

[LINK] http://schoolofweb.net/blog/posts/%ED%8C%8C%EC%9D%B4%EC%8D%AC-%EB%8D%B0%EC%BD%94%EB%A0%88%EC%9D%B4%ED%84%B0-decorator/

 

*Generator :

1) 그런데 어느날 부터 프로그래머들은 한번에 일을 다하고 영원히 사라져버리는 함수가 아닌 하나의 일을 마치면 자기가 했던 일을 기억하면서 대기하고 있다가 다시 호출되면 전의 일을 계속 이어서 하는 똑똑한 함수를 필요로 하기 시작했습니다. 그래서 만들어진 것이 제너레이터입니다. 제너레이터를 사용하면 일반 함수보다 훨씬 좋은 퍼포먼스를 낼 수가 있고, 메모리 리소스도 절약할 수 있습니다. 

 

2) 제너레이터는 자신이 리턴할 모든 값을 메모리에 저장하지 않기 때문에 조금 전 일반 함수의 결과와 같이 한번에 리스트로 보이지 않는 것입니다. 제너레이터는 한 번 호출될때마다 하나의 값만을 전달(yield)합니다

 

3) 제너레이터는 모든 결과값을 메모리에 저장하지 않기 때문에 더 좋은 퍼포먼스를 냅니다. 

 

*with next()

*with List Comprehension

* list(Generator Object) 는 값을 list로 return함

 

[LINK] http://schoolofweb.net/blog/posts/%ED%8C%8C%EC%9D%B4%EC%8D%AC-%EC%A0%9C%EB%84%88%EB%A0%88%EC%9D%B4%ED%84%B0-generator/