728x90
반응형
python에서 generator는 interator를 작성하는 편리한 방법이다
호출자가 메서드를 호출할 때,
- return 은 반환값을 반환하고 메서드를 종료한 후,
호출자에게 제어를 반환한다 - yield 는 각 반화값을 호출자에게 반환하고,
반환값이 모두 소진되었을 때에만 메서드가 종료된다
generator
제너레이터는 파이썬의 시퀀스를 생성하는 객체다
- 전체 시퀀스를 한 번에 메모리에 생성하고 정렬할 필요엾이, 잠재적으로 아주 큰 시퀀스를 순회할 수 있다
- 제너레이터를 순회할 때마다 마지막으로 호출된 요소를 기억하고 다음 값을 반환한다
def fib_generator():
a, b = 0, 1
while True:
yield b
a, b = b, a+b
if __name__ = "__main__":
fg = fib_generator()
for _ in range(10):
print(next(fg), end=' ')
iterator
- 이터레이터 프로토콜을 구현하는 컨테이너 객체다
- 객체에
__iter__()
,__next__()
메서드를 둘 다 정의하면 이터레이터 프로토콜을 구현한 것이다 - 컨테이너의 다음값을 반환하는
__next__()
메서드 - 이터레이터 자신을 반환하는
__iter__()
메서드 - 이때
yield
를 사용하면 편리하다
yield
제너레이터 맥락에서 이터레이터를 만드는 강력한 도구다
- 제너레이터는 최종값을 반환하지만, 이터레이터는 yield 를 사용하여 코드 실행 중에 값을 반환한다
__next__()
메서드를 호출할 때마다 어떤 값 하나를 추출한 후 해당 yield 표현식의 값을 반환한다- 이터레이터는 StopIteration 예외 가 발생할 때까지 값을 반환한다
>>> a = [1,2,3]
>>> def f(a):
... while a:
... yield a.pop()
728x90
728x90
BIG
'Programming > Python' 카테고리의 다른 글
lambda - 람다 (0) | 2020.10.06 |
---|---|
filter(), map() (0) | 2020.10.05 |
False - 거짓 (0) | 2020.09.28 |
input(), sys.stdin - 코딩테스트 시 입력받기 (0) | 2020.09.24 |
byte-compiled code - python (0) | 2020.09.22 |
댓글