본문 바로가기
개발/python

[python] 제너레이터(Generator)

by 유다110 2017. 9. 12.
반응형

0.

몇 번 읽어서 겨우 감이 잡힌 제너레이터/이터레이터

노트에 정리해뒀는데 일주일에 한 번씩 읽어야 안 까먹음

젠쟝 사실 지금도 벌써 가물가물하다.


1.

yield 라는 구문을 통해 이루어진다(?)

신기하게도 파이썬은 2에서 3으로 바뀐 뒤로, print나 exec 같이 대부분의 구문에 괄호가 생겼는데

yield는 파이썬3에서도 괄호가 없다.

왜지.


2.

오 스택오버플로우에 누군가가 질문을


질문 >>

print나 yield 둘 다 값 리턴해줌

근데 파이썬2에서 3으로 바뀔 때, print는 소괄호를 필요로 하지만 yield는 그대로임

yield는 누런 색인데 print는 보라색임(? 난 Pycharm-Monokai 쓰는데 둘 다 청록색)


답변1 >>

print는 statement였다가 built-in function이 된 케이스고 yield는 그대로 statement임. return 처럼.

그리고 색깔은 각자의 개발환경ㅇㅇ


답변2 >> 

PEP 255에 yield에 대한 자세한 문서가 있음


3.

어쨌든 generator 함수가 실행 중에 yield를 만나면 그대로 정지하며, 반환값을 next()를 호출한 쪽으로 전달한다.

가장 쉬운 제너레이터 예시

def fino(n):
	a = b
	for i in range(n):
		yield a
		a, b = b, a+b
		
for x in fibo(100000):
	print(x)


4.

제너레이터가 중요한 이유,

제너레이터는 모든 값을 메모리를 한꺼번에 저장하는 게 아니라 그때그때 사용하기 때문에 메모리 사용량을 줄일 수 있다.

반응형

'개발 > python' 카테고리의 다른 글

[python] print와 return의 차이점  (4) 2017.10.27
[python] Python을 web에서 컴파일하는 여러 가지 방법  (2) 2017.09.13
[TIP] *args **kwargs  (4) 2017.09.12
windows에서 RabbitMQ 설치  (4) 2017.06.20
Python 검색 엔진 : Whoosh  (2) 2016.12.22

댓글