파이썬 공부하기
[Python] 파이썬 이터레이터, 제너레이터 (Iterator, Generator) 본문
이터레이터 (Iterator)
이터레이터는 파이썬에서 순회 가능한(iterable) 객체의 요소에 차례로 접근하는 객체입니다. 이터레이터는 __iter__()
메서드와 __next__()
메서드를 갖고 있습니다.
1. 이터러블 객체 (Iterable)
이터러블 객체는 내장 함수 iter()
에 의해 이터레이터로 변환될 수 있는 객체입니다. 대표적인 예시로는 리스트, 튜플, 문자열 등이 있습니다.
my_list = [1, 2, 3, 4, 5]
my_iter = iter(my_list)
2. 이터레이터 객체 (Iterator)
이터레이터 객체는 __iter__()
메서드를 갖고 있어야 하며, __next__()
메서드를 통해 다음 요소를 반환합니다. 만약 더 이상 다음 요소가 없다면 StopIteration
예외를 발생시켜야 합니다.
class MyIterator:
def __iter__(self):
self.index = 0
return self
def __next__(self):
if self.index < 5:
result = self.index
self.index += 1
return result
else:
raise StopIteration
my_iter = MyIterator()
3. for 루프와 이터레이터
파이썬의 for
루프는 내부적으로 iter()
함수로 이터레이터를 생성하고, __next__()
메서드를 호출하여 순회합니다.
my_list = [1, 2, 3, 4, 5]
for item in my_list:
print(item)
위의 코드는 내부적으로 iter(my_list)
를 호출하고, 반환된 이터레이터의 __next__()
메서드를 호출하여 순회합니다.
제너레이터 (Generator)
제너레이터는 이터레이터를 생성하는 특별한 종류의 함수입니다. 제너레이터 함수는 실행 중에 일시 중단되며, 필요할 때마다 값을 생성하고 반환할 수 있습니다. 이로 인해 메모리 효율성이 향상되고, 큰 데이터셋을 처리할 때 유용합니다.
1. 제너레이터 함수
제너레이터 함수는 yield
키워드를 사용하여 값을 생성하고, 함수의 실행 상태를 일시 중단합니다.
def my_generator():
yield 1
yield 2
yield 3
gen = my_generator()
2. 제너레이터 표현식
리스트 컴프리헨션과 유사하게 제너레이터를 생성하는 표현식입니다.
gen_expr = (x for x in range(3))
3. 제너레이터의 활용
제너레이터는 메모리를 효율적으로 사용하며, 데이터 스트림을 효과적으로 처리하는 데 유용합니다. 예를 들어, 파일의 각 행을 처리할 때 제너레이터를 사용할 수 있습니다.
def read_file(file_path):
with open(file_path, 'r') as file:
for line in file:
yield line
file_gen = read_file('example.txt')
for line in file_gen:
print(line)
제너레이터는 데이터를 필요할 때마다 생성하므로 큰 데이터셋에 대한 반복 작업에 적합하며, 무한한 시퀀스를 모델링하는 데도 사용될 수 있습니다.
'파이썬 기초' 카테고리의 다른 글
[Python] 파이썬 클래스 (1) | 2024.01.13 |
---|---|
[Python] 파이썬 집합 (0) | 2024.01.12 |
[Python] 파이썬 딕셔너리 (0) | 2024.01.12 |
[Python] 예외 처리 (0) | 2024.01.12 |
[Python] 파이썬 List Comprehension (0) | 2024.01.12 |