파이썬 & 오픈소스 개발 질문과 답변 게시판

파이썬과 여러 오픈소스 기반 프레임워크 관련 질문 답변 게시판 입니다. 궁금하신 사항을 올려 주시면 빠른 시일내에 답변 드리도록 하겠습니다. 아울러, 개발 과정의 경우 간소화 시킨 문제 재현 코드나 운영일 경우 최근의 특이사항을 올려 주시면 답변 드리는 프런티어 분들이 더욱 상세한 답변을 드릴 수 있으니 많은 도움 되시길 바랍니다.

Python Tip을 FAQ로 정리.

 

Python의 yield 구문은 무엇인가요?

python - What does the "yield" keyword do? - Stack Overflow

stackoverflow에서 12k이상의 voting이 있는 내용.

 

간략히, 큰 collection을 메모리에 로드하지 않고, generator로 iteration된 개별 항목을 처리 가능한 python의 구문.

 

iterables

list를 생성하면, item을 하나씩 읽기 가능. item을 하나씩 읽는 것을 iteration이라보 명명.

>>> mylist = [1, 2, 3]
>>> for i in mylist:
...    print(i)
1
2
3

 

 

Generators

generator는 iterator이고, 오직 하나씩만 iterate 할 수 있다. 모든 값들을 메모리에 로드하지 않고 값을 그때그때 generate 함.

>>> mygenerator = (x*x for x in range(3))
>>> for i in mygenerator:
...    print(i)
0
1
4

 

Yield

yield는 return처럼 사용되지만, 차이점은 generator만 리턴한다.

>>> def create_generator():
...    mylist = range(3)
...    for i in mylist:
...        yield i*i
...
>>> mygenerator = create_generator() # create a generator
>>> print(mygenerator) # mygenerator is an object!
<generator object create_generator at 0xb7555c34>
>>> for i in mygenerator:
...     print(i)
0
1
4

 

일반적인 함수는 실행이 종료되면 return 후 종료되며 메모리에서 제거된다.

하지만, generator 함수가 실행될 때, yield가 실행되면 함수는 잠시 대기하고 return값만 호출한 쪽으로 전달한다. 이때, 함수는 메모리에 그대로 남고 종료되지 않는다.

 

도움 되시길 바랍니다.

 

참고링크: 6. Expressions — Python 3.10.8 documentation

 






XE Login