반복자(Iterator)
- 반복가능한 개체(Iterable object)
- 반복문을 활용해서 데이터를 순회하면서 처리하는 것
- next()를 가진 모든 객체
- 무한한 데이터소스를 나타낼 수 있다.
- 아래 예시로 확인하자
x = iter([1, 2, 3])
print(next(x))
# 1
print(next(x))
# 2
print(next(x))
# 3
print(next(x))
# stopiteration exception
데이터를 순회시키면서 처리할 수 있다.
x = iter([1, 2, 3])
print(x.__next__())
# 1
print(x.__next__())
# 2
print(x.__next__())
# 3
print(x.__next__())
# stopiteration exception
이러한 형태로도 가능
추가 내용 : iterable와 iterator의 차이점
- iterable : member를 하나씩 차례로 반환 가능한 object(list, str tuple)
- iterator : next() 메소드로 데이터를 순차적으로 호출 가능한 object
생성자(Generator)
- 함수로 값을 하나씩 생성하는 반복자
- 마찬가지로 Iterable
def abc():
yield 'a'
yield 'b'
yield 'c'
abc()
<generator object abc at 0x7fdcd41583b8>
이렇게 하면 생성기가 만들어진다.
Iterable하므로 next() 또한 사용가능
def abc():
yield 'a'
yield 'b'
yield 'c'
x = abc()
print(next(x))
# a
print(next(x))
# b
print(next(x))
# c
print(next(x))
# StopIteration
재밌게도 yield는 return과 상당히 유사해
yield문이 실행되는 순간 값을 반환하고 그 줄에서 멈춘다.
그때그때 생성하는 특성 덕분에
미리 크기를 선언하지 않아도 되어
이론상 무한한 생성이 가능하다.
생성기 식(generator expression)과 같은 자세한 내용은 아래 링크를 참고
https://python.bakyeono.net/chapter-7-4.html
'파이썬 > 2. 파이썬 심화' 카테고리의 다른 글
파이썬 게으른 연산(lazy evaluation) (0) | 2020.04.27 |
---|---|
파이썬 클로저(closure) (0) | 2020.04.23 |
파이썬 람다 함수(lambda) (0) | 2020.04.23 |
파이썬 데코레이터(Decorator) + *args, **kwargs (0) | 2020.04.23 |
파이썬 함수 호출방식 (0) | 2020.04.13 |