본문 바로가기

파이썬/2. 파이썬 심화

파이썬 반복자와 생성자(Iterator, Generator)

반복자(Iterator)

  • 반복가능한 개체(Iterable object)
  • 반복문을 활용해서 데이터를 순회하면서 처리하는 것
  • next()를 가진 모든 객체
  • 무한한 데이터소스를 나타낼 수 있다.
  • 아래 예시로 확인하자
x = iter([1, 2, 3])

print(next(x))
# 1
print(next(x))
# 2
print(next(x))
# 3
print(next(x))
# stopiteration exception

데이터를 순회시키면서 처리할 수 있다.

x = iter([1, 2, 3])

print(x.__next__())
# 1
print(x.__next__())
# 2
print(x.__next__())
# 3
print(x.__next__())
# stopiteration exception

이러한 형태로도 가능

 

추가 내용 : iterable와 iterator의 차이점

  • iterable : member를 하나씩 차례로 반환 가능한 object(list, str tuple)
  • iterator : next() 메소드로 데이터를 순차적으로 호출 가능한 object

 

생성자(Generator)

  • 함수로 값을 하나씩 생성하는 반복자
  • 마찬가지로 Iterable
def abc():
	yield 'a'
	yield 'b'
	yield 'c'

abc()
<generator object abc at 0x7fdcd41583b8>

이렇게 하면 생성기가 만들어진다.

Iterable하므로 next() 또한 사용가능

def abc():
	yield 'a'
	yield 'b'
	yield 'c'

x = abc()
print(next(x))
# a
print(next(x))
# b
print(next(x))
# c
print(next(x))
# StopIteration

재밌게도 yield는 return과 상당히 유사해

yield문이 실행되는 순간 값을 반환하고 그 줄에서 멈춘다.

그때그때 생성하는 특성 덕분에

미리 크기를 선언하지 않아도 되어

이론상 무한한 생성이 가능하다.

 

생성기 식(generator expression)과 같은 자세한 내용은 아래 링크를 참고

https://python.bakyeono.net/chapter-7-4.html