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