iterable에 대한 python 공식문서의 정의는 다음과 같다
An iterable is any Python object capable of returning its members one at a time permitting it to be iterated over in a for-loop
해석을 해보면 for loop을 통해 안에 있는 member들을 차례대로 반환 할 수 있는 object라는 뜻이다. 예를 들면 파이썬의 list, tuple, string이 iterable에 속한다고 할 수 있다. 또한 순서가 없는 collection, dictionary, set 또한 iterable 하다고 할 수 있다.
list
>>> my_list = [1,2,3]
>>>
>>> for i in my_list:
... print(i)
...
1
2
3
dictionary
>>> for key,values in my_dict.items():
... print(key,end=" ")
... print(values, end=" ")
...
a 1 b 2 c 3
Generator에 대한 python 공식문서의 정의는 다음과 같다
A function which returns an iterator. It looks like a normal function except that it contains yield statements for producing a series of values usable in a for-loop or that can be retrived one at a time with the next() function.
iterator를 반환하는 함수이지만 일반 함수와 다른 점은 return 구문 대신 yield 구문을 사용한다는 것이다. Generator의 예시를 들어보자
def generator(n):
i = 0
while i < n:
yield i
i = i + 1
Generator 함수 내에서 yield 구문을 사용하면, for문으로 멤버들을 꺼내는 방법 이외에도 next() 함수를 사용해 iterator의 모든 멤버들을 차례대로 하나씩 return 받을 수 있다.
>>> x = generator(5)
>>> next(x)
0
>>> next(x)
1
>>> next(x)
2
>>> next(x)
3
>>> next(x)
4