프로그래밍/PYTHON

python - Iterable, Iterator

aiemag 2021. 2. 3. 22:07
반응형

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 = [123]
    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 = [123]
 
    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