Python의 yield(생성자) 설명

이게 뭔지.. 신기해서 찾아봤다.
그렇군.

대용량 작업을 처리하기 위해 함수와 메인간에 제어권을 주고 받는 역활을 한다
* 참고 : http://pyengine.blogspot.kr/2010/12/python-yield.html

즉, 소규모작업에서는 큰 문제가 없지만, 대형의 작업등에는 모든 작업이 끝나기를 기다릴 수가 없는 경우가 있습니다

따라서 이때는 중간 중간에 수행을 할 수 있게 yield라는 구문이 들어가게 되는 것입니다.

yield 명령에 대한 예제 코드이다.

def gen_num():
    while 1:
        yield i
        i++
 
a = gen_num()
for x in range(10) :
    print a.next(),
 
## ----------------------------------------------------
## 0 1 2 3 4 5 6 7 8 9

그러면 왜 List 방식을 사용하지 않는 것일까?
피보나치 수열이나 트리 탐색 등을 스택 즉, List를 이용한 재귀호출 방식으로 처리하면
작업량이 클 경우 오버헤드가 커지기 때문이다.

그러면 왜 Generator방식을 사용하는가?

List로 통째로 넘기는 방식은 데이터량이 클 경우 모든 작업이 완전히 수행한 다음에 넘길수가 있습니다.
즉, 하나의 작업이 완전히 끝난후에 제어권을 넘기는 것이죠

답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Google+ photo

Google+의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

%s에 연결하는 중

%d 블로거가 이것을 좋아합니다: