Notice
Recent Posts
Recent Comments
Link
«   2025/10   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

파이썬 공부하기

[Python] 파이썬 이터레이터, 제너레이터 (Iterator, Generator) 본문

파이썬 기초

[Python] 파이썬 이터레이터, 제너레이터 (Iterator, Generator)

파이썬러버 2024. 1. 13. 03:16

이터레이터 (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