제너레이터

  • 이터레이터를 만드는 간단하고 강력한 도구
  • 함수 안에서 yield를 사용하면 그 함수는 제너레이터가 됨
  • 모든 제너레이터 객체는 이터레이터임
  • 간단하게 이터레이터를 구현할 수 있음
def gen():
    yield 0
    yield 1
    yield "hi"

g = gen()
print(next(g))
print(next(g))
print(next(g))
# print(next(g))
0
1
hi

제너레이터 표현식

def gen():
    for i in range(1, 5):
        result = i * i
        yield result

g = gen()
print(next(g))
print(next(g))
print(next(g))

# 튜플 표현식으로 간단하게 만들 수 있음
g = (i * i for i in range(1, 5))
print(next(g))
print(next(g))
print(next(g))
1
4
9
1
4
9

제너레이터의 쓰임새

  • 대량의 데이터를 처리할 때 많이 사용
  • 한 줄씩 순서대로 처리하기 때문에 메모리 사용이 적음
# 이터레이터
def it():
    print("iterator")
    return "done"

it = iter([it() for i in range(3)])
print(next(it))

# 제너레이터
def gen():
    print("generator")
    return "done"

g = (gen() for i in range(3))
print(next(g))

# 모든 함수를 한꺼번에 실행되는 iterator와 달리 generator는 필요할 때만 실행하는 방식
iterator
iterator
iterator
done
generator
done

참고자료

카테고리:

업데이트:

댓글남기기