[python] 제너레이터와 이터레이터의 효율적인 활용
이터레이터와 제너레이터
이터레이터(iterator)와 제너레이터(generator)는 파이썬에서 데이터 스트림을 다루거나 생성할 때 사용되는 도구입니다.
이터레이터는 데이터 스트림을 순회하면서 하나의 요소를 반환하고, 다음 요소의 참조를 유지합니다. 보통 __iter__()
와 __next__()
메서드를 구현하여 사용됩니다.
제너레이터는 이터레이터를 생성하는 함수로, yield
키워드를 사용하여 값을 반환하고 호출자에게 제어권을 넘겨줍니다. 이를 통해 다음 호출에서 이전 상태를 유지하고 값을 반환합니다.
이터레이터의 활용
이터레이터는 메모리를 효율적으로 사용할 수 있다는 장점이 있습니다. 데이터가 실시간으로 생성되거나 큰 데이터셋을 다룰 때 유용합니다.
다음은 간단한 이터레이터의 예시입니다.
class MyIterator:
def __init__(self, data):
self.data = data
self.index = 0
def __iter__(self):
return self
def __next__(self):
if self.index < len(self.data):
result = self.data[self.index]
self.index += 1
return result
else:
raise StopIteration
제너레이터의 활용
제너레이터는 이터레이터에 비해 코드가 간결하고 효율적입니다. 동적으로 데이터를 생성하므로, 메모리를 효율적으로 사용할 수 있습니다.
다음은 제너레이터의 예시입니다.
def my_generator(data):
for item in data:
yield item
또는 조건에 부합하는 값을 생성하는 예시를 들어보겠습니다.
def even_numbers(n):
for i in range(n):
if i % 2 == 0:
yield i
결론
이터레이터와 제너레이터는 데이터 스트림을 효율적으로 다루고 생성하기 위한 파이썬의 강력한 기능입니다. 이를 잘 활용하면 메모리를 효율적으로 활용하고 코드를 간결하게 작성할 수 있습니다.
참고문헌:
- 파이썬 공식 문서: https://docs.python.org/3/tutorial/classes.html#iterators
- 파이썬 공식 문서: https://docs.python.org/3/tutorial/classes.html#generators