1. Iterable
iterable 객체: 반복 가능한 객체
대표적으로 iterable한 타입 - list, dict, set, str, bytes, tuple, range
collections.iterable에 속한 instance인지의 확인을 통해 iterable 객체인지 판별할 수 있다.
>>> import collections
# iterable 한 타입
>>> var_list = [1, 3, 5, 7]
>>> isinstance(var_list, collections.Iterable)
True
>>> var_dict = {"a": 1, "b":1}
>>> isinstance(var_dict, collections.Iterable)
True
>>> var_set = {1, 3}
>>> isinstance(var_set, collections.Iterable)
True
>>> var_str = "abc"
>>> isinstance(var_str, collections.Iterable)
True
>>> var_bytes = b'abcdef'
>>> isinstance(var_bytes, collections.Iterable)
True
>>> var_tuple = (1, 3, 5, 7)
>>> isinstance(var_tuple, collections.Iterable)
True
>>> var_range = range(0,5)
>>> isinstance(var_range, collections.Iterable)
True
# iterable하지 않은 타입
>>> var_int = 932
>>> isinstance(var_int, collections.Iterable)
False
>>> var_float = 10.2
>>> isinstance(var_float, collections.Iterable)
False
>>> var_none = None
>>> isinstance(var_none, collections.Iterable)
False
2. Iterator
iterator 객체: 값을 차례대로 꺼낼 수 있는 객체
파이썬 내장함수 iter()를 사용해 iterator 객체를 만들 수 있다.
>>> a = [1, 2, 3]
>>> a_iter = iter(a)
>>> type(a_iter)
<class 'list_iterator'>
iterable객체는 매직메소드 __iter__ 메소드를 가지고 있다. 이 메소드로 iterator를 생성할 수 있다.
>>> b = {1, 2, 3}
>>> dir(b)
['__and__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__iand__', '__init__', '__init_subclass__', '__ior__', '__isub__', '__iter__', '__ixor__', '__le__', '__len__', '__lt__', '__ne__', '__new__', '__or__', '__rand__', '__reduce__', '__reduce_ex__', '__repr__', '__ror__', '__rsub__', '__rxor__', '__setattr__', '__sizeof__', '__str__', '__sub__', '__subclasshook__', '__xor__', 'add', 'clear', 'copy', 'difference', 'difference_update', 'discard', 'intersection', 'intersection_update', 'isdisjoint', 'issubset', 'issuperset', 'pop', 'remove', 'symmetric_difference', 'symmetric_difference_update', 'union', 'update']
>>> b_iter = b.__iter__()
>>> type(b_iter)
<class 'set_iterator'>
iterator가 값을 차례대로 꺼낼 수 있는 객체라는 것의 의미를 한번 코드로 살펴보자.
next내장함수를 사용할때 마다 첫번째, 두번째, 세번째 값이 출력된다.
네번째 실행에서는 StopIteration 이라는 예외가 발생한다.
>>> next(a_iter)
1
>>> next(a_iter)
2
>>> next(a_iter)
3
>>> next(a_iter)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
StopIteration
iterator 매직 메소드 'next'를 통해 하나씩 값을 꺼낼 수 있다.
>>> b_iter.__next__()
1
>>> b_iter.__next__()
2
>>> b_iter.__next__()
3
>>>
Reference:
https://wikidocs.net/16068
'Python' 카테고리의 다른 글
| [Python] enumerate 와 zip (0) | 2022.11.09 |
|---|---|
| [Python] List Comprehension (0) | 2022.11.08 |
| [Python] list 관련 메서드 (0) | 2022.09.12 |
| [Python] Object Oriented Programming(OOP) (0) | 2022.05.17 |
| [Python] 'is'와 '=='의 차이 (0) | 2022.01.01 |