언어/Python

python study : Generator

쟈누이 2020. 3. 28. 12:14
반응형

 

제너레이터(Generator)는 파이썬의 시퀀스를 생성하는 객체이다. 

제너레이터로 전체 시퀀스를 한번에 메모리에 생성하고 정렬할 필요 없이,

잠재적으로 아주 큰 시퀀스(예를 들면 range 등..)을 순회할 수 있다.

 

def rangess(first = 0, last = 100, step = 1):
	number = 0
  	while number <= last:
    	yield number
        number += step
        
>> rangers = rangess(1,20)
>> rangers
<function rangess at 0x10193e268>

이 개념에 대해서 보았을 때는 아무리 쳐도 

<function rangess at ... > 의 말이 나와서 어떤 것을 저장한다는지 이해가 잘 되지 않았었는데..

다시 보고 이해가 되지 않는 것들을 찾아보았다.

왜, 값을 리턴하지 않고 객체가 나오지..?라는 의문이 가시지를 않아 계속 찾아보고 있었는데, 때마침 제너레이터에 대해서 잘 정리해준 글을 올려주신 분이 있어.. 이를 나중에 그대로 기억하기위해서 그대로 가져왔다.

 

""""""""

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

즉, 위의 #1까지는 아직 아무런 계산을 하지 않고 누군가가 다음 값에 대해서 물어보기를 기다리고 있는 상태입니다

"""""""""

제너레이터는 한꺼번에 값을 기억하고 있는 것이다..단 그것을 메모리에 저장하지 않기 때문에 우리가 원하는 값을 보니는 힘든 것이다.

이를 출력하기 위해서는 for 문이나 while 문 등 loop 문 등 여러 방법들을 통해 

제너레이터가 기억하고 있는 결과 값들을 하나씩 리턴할 수가 있다.

 

>> for i in rangers:
		print(i)
1
2
3
4
5
...
99

 

아래 참고용 링크에는 보다 자세한 설명들이 있기 때문에 이해가 안될 때 들어가서

자세히 보아야 겠다.

 

 

 

 

 

참고용 링크

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/

 

SchoolofWeb :: 파이썬 - 제너레이터 (Generator)

파이썬 제너레이터 (Generator) 강좌

schoolofweb.net

 

반응형