프로그래밍/[ Python ]

[Python] Iterator

gooooooood 2024. 11. 20. 11:05
반응형

파이썬에서 이터레이터(Iterator) 는 컬렉션의 요소들을 순차적으로 접근할 수 있는 객체입니다. 이터레이터는 두 가지 주요 기능을 제공합니다:

  1. __iter__(): 이 메서드는 이터레이터 객체 자신을 반환합니다. 이 메서드는 이터러블 객체에서 호출되며, 객체가 이터러블한지 확인하는 역할을 합니다.
  2. __next__(): 이 메서드는 순차적으로 다음 값을 반환하며, 더 이상 값이 없으면 StopIteration 예외를 발생시킵니다.

 

예시 코드 1: 간단한 이터레이터 구현

class MyIterator:
    def __init__(self, start, end):
        self.current = start
        self.end = end

    def __iter__(self):
        return self  # 이터레이터 객체를 반환

    def __next__(self):
        if self.current >= self.end:
            raise StopIteration  # 반복을 종료하는 예외
        self.current += 1
        return self.current - 1

# 사용 예시
my_iter = MyIterator(0, 5)
for number in my_iter:
    print(number)
# 출력
0
1
2
3
4

이 예제에서는 MyIterator 클래스를 정의하고, __iter__()와 __next__() 메서드를 구현하여 0부터 4까지의 숫자를 순차적으로 반환하는 이터레이터를 만들었습니다.

 

예시 코드 2: iter()와 next() 함수 사용

파이썬의 내장 iter() 함수와 next() 함수는 이터레이터와 함께 사용됩니다.

my_list = [10, 20, 30]
iterator = iter(my_list)  # 리스트에서 이터레이터 생성

print(next(iterator))  # 10
print(next(iterator))  # 20
print(next(iterator))  # 30
# print(next(iterator))  # StopIteration 예외 발생
# 출력
10
20
30

여기서 iter() 함수는 리스트에서 이터레이터를 생성하고, next() 함수는 이터레이터에서 순차적으로 값을 가져옵니다. 값이 더 이상 없을 때 StopIteration 예외가 발생합니다.

 

예시 코드 3: 제너레이터 함수로 이터레이터 만들기

파이썬의 제너레이터(generator)는 이터레이터를 쉽게 만들 수 있는 특별한 함수입니다. yield 키워드를 사용하여 이터레이터를 정의합니다.

def count_up_to(max):
    count = 1
    while count <= max:
        yield count  # 값을 반환하고 함수 상태를 기억함
        count += 1

# 사용 예시
for number in count_up_to(3):
    print(number)
# 출력
1
2
3

이 예제에서 count_up_to 함수는 yield를 사용하여 값을 하나씩 반환합니다. 제너레이터는 호출될 때마다 이전 상태를 기억하며, next()가 호출될 때마다 yield에서 지정한 값을 반환합니다.

 

요약:

  • 이터레이터는 순차적으로 값에 접근할 수 있는 객체입니다.
  • __iter__()와 __next__() 메서드를 구현하여 이터레이터를 직접 만들 수 있습니다.
  • iter()와 next()를 사용하여 이터레이터와 상호작용할 수 있습니다.
  • 제너레이터 함수(yield)를 사용하여 이터레이터를 간편하게 생성할 수 있습니다.

 

반응형

'프로그래밍 > [ Python ]' 카테고리의 다른 글

[Python] Matplotlib  (0) 2024.11.22
[Python] Lambda  (0) 2024.11.21
python 정규 표현식 regex  (0) 2024.11.19
[Python] DataFrame (1)  (0) 2024.11.18
[Python] JSON 처리  (1) 2024.11.15