이번 포스트에서는 iterator와 generator에 대해 알아보겠습니다.
1) iterator
iterator는 집합에서 차례대로 값을 꺼낼 수 있는 객체를 말합니다.
iterator는 집합의 크기가 매우 크고 데이터의 양이 아주 많을 때
일일이 그 집합을 사용하지 않고 필요한 값을 뽑아 사용합니다.
이 방식은 메모리에도 부담을 덜 주기에 집합이 큰 경우에 아주 효율적입니다.
iterator의 경우 반복이 가능한 객체에만 사용할 수 있는데,
이러한 객체의 상태를 'iterable하다' 라고 표현할 수 있습니다.
iterator는 다음의 2개의 함수로 동작합니다.
iter() 함수를 통해 객체를 반복 가능한 객체로 변환합니다.
next() 함수로 객체의 값을 뽑아올 수 있습니다.
그리고 가장 중요한 것은 한번 next() 를 실행하면 그 값을 다시 사용할 수 없다는 것입니다.
즉, 한번 객체를 순회하면 객체를 재사용할 수 없습니다.
코드로 한번 살펴보겠습니다.
a = [1, 2, 3]
iterator = iter(a)
print(next(iterator))
print(next(iterator))
print(next(iterator))
print("==================")
print("Iterator")
for num in iterator:
print(num)
print("Not Iterator")
for num in a:
print(num)
위와 같은 코드를 구성하였습니다.
a라는 리스트가 존재하고 a를 iter한 객체 iterator 역시 존재합니다.
위의 코드를 실행한 결과는 다음과 같습니다.
값을 사용하고 남은 Iterator는 값이 없지만 리스트 a에는 여전히 값이 남아있음을 확인할 수 있습니다.
다음으로는 generator에 대해 알아보겠습니다.
2) Generator
generator는 iterator를 생성하는 함수를 말합니다.
generator를 사용하는 이유는 간단합니다.
함수를 사용할 때 하나의 값만을 return하지 않고 순차적으로 다른 값을 return하고자 할때 사용합니다.
이때 return이 아닌 yield() 함수를 사용해 객체를 iterator로 변환하며 yield 시에 값이 저장됩니다.
따라서 기존의 iterator에 비해 비교적 쉽게 사용이 가능합니다.
코드를 통해 알아보겠습니다.
def client_count(total_client):
n = 1
for num in range(total_client):
print (f"{n}번째 고객님이 입장하셨습니다")
n += 1
yield ""
gen = client_count(10)
for i in range(10):
print(next(gen))
위의 코드에서 gen은 generator인 yield 함수를 사용하여 iterator로서 동작하게 됩니다.
따라서 next를 통해 값을 순회할 수 있습니다.
위의 코드에서 yield는 비어있는 한 줄을 리턴하게 됩니다.
따라서 결과는 다음과 같습니다.
'Python' 카테고리의 다른 글
Closure와 Decorator (0) | 2024.11.17 |
---|---|
인코딩과 디코딩 (0) | 2024.11.16 |
자료형 어노테이션 (0) | 2024.11.15 |
python을 통한 주식 관련 정보 추출 (2) (0) | 2024.03.03 |
python을 통한 주식 관련 정보 추출 (1) (0) | 2024.03.03 |