더북(TheBook)

제너레이터 함수가 반환하는 객체가 이터레이터라고 불리는 제너레이터 객체라는 것을 이해하고 나면 문법적으로 이터러블 혹은 이터레이터를 넣을 수 있는 곳이라면 어느 곳에서든지 호출할 수 있게 된다. 가령 제너레이터 객체를 다음과 같이 리스트로 변환할 수도 있다.

>>> my_gen = make_evens_gen()
>>> a_list = list(my_gen)
>>> a_list
[2, 4, 6, 8, 10]
>>> a_list = list(my_gen)      # 앗! 재설정(reset)을 안 했군!
>>> a_list
[]

이 예시의 마지막 문장에서 확인할 수 있듯이 이 코드는 제너레이터 객체를 매번 재설정해야 다시 사용할 수 있다는 문제점을 갖고 있다.

>>> my_gen = make_evens_gen()      # 재설정(reset)!
>>> a_list = list(my_gen)
>>> a_list
[2, 4, 6, 8, 10]

물론 함수 호출과 리스트 변환을 동시에 할 수도 있다. 리스트는 (제너레이터 객체와는 다르게) 그 자체만으로도 안정적이며 값을 반환한다.

>>> a_list = list(make_evens_gen())
>>> a_list
[2, 4, 6, 8, 10]
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.