클로저, 제너레이터

Jung Yun Kim·2021년 7월 27일
0

클로저

프로그래밍을 하다 보면 함수안에서 지역변수를 사용한것을 외부함수에서 쓰고 싶을때가 있는데 이럴때는 항상 문제가 있다.
지역변수란 함수가 종료되면 스택에서 사라져서 더이상 접근을 할 수 없게 되는데, 클로저는 이를 접근하여 사용할 수 있게 하는 그런 기술이다.

제너레이터

파이썬을 조금 해봤다면 yield 키워드를 알것이다.
사용해보면 yield 는 pause 의 느낌이다.
제너레이터는 다음 값이 될 것 next 를 그 자리에서 계산하여 내어준다.
제너레이터가 아니라면 메모리에 계산된 피보나치수열을 가지고 있던가, 매번 n번째까지 계산하던가 했어야 하는데
제너레이터를 사용하면 호출할때마다 한번씩 계산하고 그 문맥에서 정지해 있다고 보면 된다.

def fib(n):
    curr, next = 0, 1
    for _ in range(n):
        curr, next = next, curr + next
    return curr
    

def fib_generator():
    curr, next = 0, 1
    while True:
        curr, next = next, curr + next
        yield curr

fibo_gen = fib_generator()
next(fibo_gen) #1
next(fibo_gen) #1
next(fibo_gen) #2
next(fibo_gen) #3
next(fibo_gen) #5

0개의 댓글