python에서 지원하는 iterator 에 관해 정리합니다.
우선 iterator를 알기 위한 iterable을 정리합니다.
Iterable
가지고 있는 값을 한번에 하나씩 반환할 수 있는 개체를 말함. 한번에 모든 값을 반환할 수도 있고 한 번에 하나씩만 반환활 수도 있음.
대다수의 container 및 open files, open socks에서 지원하며 클래스에서 __iter__ 나 __getitem__ 메서드를 구현한 경우가 iterable한 case임
다음은 sample code입니다.
여기서는 x가 list type container인 iterable입니다.
x_iter는 iter함수를 이용하여 x를 iterator로 만든 것 입니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
|
#!/usr/bin/python3
def main():
x = [1, 2, 3]
x_iter = iter(x)
print("x type : %s" % type(x))
print("x_iter type : %s" % type(x_iter))
print("x_iter next : %s" % next(x_iter))
print("x next : %s" % next(x))
if __name__ == "__main__":
main()
|
cs |
출력 결과를 보시면
6 line에서 x는 list type인 것을 확인할 수 있고,
7 line에서 x_iter는 list_iterator type인 것을 확인할 수 있습니다.
8 line에서 next() 함수를 이용하여 iterator의 값을 하나 가져옵니다.
9 line에서 next() 함수를 이용하여 iterable의 값을 하나 가져오려고 했지만, error가 발생합니다.
이번엔 iterator의 정의입니다.
Iterator
한 번에 하나씩만 값을 반환하는 개체
다음은 sample code 입니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
#!/usr/bin/python3
def main():
x = [1, 2, 3]
print('\ntest 1')
x_iter = iter(x)
for value in x_iter:
print(value)
print('\ntest 2')
x_iter = iter(x)
for i in range(4):
print(next(x_iter))
if __name__ == "__main__":
main()
|
cs |
8 line과 같이 for 문에서 iterator를 바로 이용 가능합니다.
출력결과 x의 내용이 모두 출력되었습니다.
14 line에서는 range를 이용하여 총 4회 next()를 이용하여 값을 읽어오도록 해봅니다.
x_iter의 값은 총 3개 이기때문에 next()를 4번째 호출하는 순간 StopIteration Exception이 발생하며 loop 종료됩니다.
'프로그래밍 > PYTHON' 카테고리의 다른 글
python - Yield, Generator (0) | 2021.02.10 |
---|---|
[환경설정] python - Linux anaconda (0) | 2021.02.10 |
python - Decorator (4) | 2021.01.22 |
python - Closure (0) | 2020.11.03 |
python - map(), filter(), reduce() usage (0) | 2020.10.27 |