1. 이터레이터(iterator)
파이썬에서 여러개의 요소를 가지는 컨테이너(list, tuple, set, dictionary, 문자열)에서 각 요소를 하나씩 꺼내 어떤 처리를 수행하는 간편한 방법을 제공하는 객체다.
for 문은 먼저 주어진 컨테이너 객체에 대해 iter() 메소드를 호출해서 이터레이터 객체를 구한다.
그리고 나서 내부의 요소를 하나씩 가져오기 위해 __next__()를 호출한다.
이 메소드는 하나의 요소를 반환하고 다음 요소를 가리키는데 이 때 더 이상 가져올 게 없으면 Soplteration 예외를 발생시킨다.
>>> for element in [1,2,3]:
print(element)
1
2
3
>>> for element in (1,2,3):
print(element)
1
2
3
>>> for element in {1,2,3}:
print(element)
1
2
3
>>> for key in {"a":1,"b":2,"c":3}:
print(key)
1
2
3
>>> for char in "123":
print(char)
1
2
3
이터레이터에 대해서 다음 요소를 직접 가져오기 위해서는 내장함수인 next()를 사용할 수 있다.
>>> s = 'abc'
>>> it = iter(s)
>>> it
<str_iterator object at 0x000001B6297FB760>
>>> next(it)
'a'
>>> next(it)
'b'
>>> next(it)
'c'
>>> next(it)
Traceback (most recent call last):
File "<pyshell#6>", line 1, in
next(it)
StopIteration
2. 제너레이터(generator)
제너레이터는 이터레이터를 만드는 간단하고 강력한 도구이다.
제너레이터는 일반적인 함수처럼 작성되지만 데이터를 반환하기 위해 return이 아니라 yield문장을 사용한다.
매번 next() 메서드가 호출될 때마다 제너레이터는 중단된 지점부터 다시 시작한다.
즉 return을 사용하는 함수라면, 반환 될 때마다 내부 지역변수들은 사라지지만 yield를 사용할 경우 내부 값들이 보존된다.
>>> def reverse(data):
for index in range(len(data)-1, -1, -1):
yield data[index]
>>> for char in reverse('golf'):
print(char)
f
l
o
g
출처 : https://offbyone.tistory.com/83
728x90
댓글