파이썬에서 Generator란? (feat. yield 함수)
글 작성자: _rian
파이썬을 그냥 아무 생각 하지 않고 지내다가 다른 사람들의 코드를 봤을 때 새로운 예약어를 많이 만나게 됩니다.
최근에는 그때 바로 이 yield
함수를 만났었는데요, Generator라는 익숙하면서도 새로웠던 개념이기 때문에 한번 정리하고자 이렇게 글을 씁니다!!
Generator란?
Generator에 대해서 이야기하기 전에 Iterator에 대해서 먼저 알고 갑시다.
Iterator란?
반복 가능한 객체, 즉 반복문을 이용하여 데이터를 순회하면서 처리하는 것을 의미합니다. 한번 아래 예시를 봅시다.
a_tuple = (1, 2, 3)
b_iterator = iter(a_tuple) # tuple -> iterable -> iterator 반환
print(next(gen))
print(next(gen))
print(next(gen))
#print(b_iterator.__next__()) -> 예외 발생!
- 첫줄에서 튜플을 선언하고, 두번째 라인에서 튜플을 iter 객체로 만들었습니다.
- next() 메소드를 호출하면 iter 의 내부 데이터들을 순회합니다.
그래서 다시 돌아와서, Genertaor란?
iterator를 생성해주는 함수를 의미합니다. 파이썬에서는 함수 안에 yield
키워드를 사용해 만들 수 있습니다.
여기서 포인트는 모든 값을 포함하여 변환하는대신 호출 할 때 마다 한개의 값을 리턴 한다는 것입니다.
즉, 호출 될 때 마다 리턴하기 때문에 메모리가 충분하지 않은 상황에서도 대용량의 반복 가능한 구조로 순회할 수 있다는 것이죠.
아래 코드는 그 예시입니다.
>>> def generator():
... yield 1
... yield 2
... yield 3
...
>>> gen = generator()
>>> type(gen)
<type 'generator'>
>>> next(gen)
1
>>> next(gen)
2
>>> next(gen)
3
>>> next(gen)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
StopIteration
yield
키워드를 사용해 generator를 만들 수 있습니다.yield
가 호출되면 임시적으로 return이 호출되며, 한번 더 실행되면 실행되었던 이전yield
의 다음 코드가 실행된다.
generator를 동시에 두개 생성하면, 서로 다른 객체로 이해하기 때문에 각기 따로 동작을 합니다.
>>> h = generator()
>>> i = generator()
>>> h == i
False
>>> h is i
False
>>> next(h)
1
>>> next(i)
1
>>> next(h)
2
>>> next(i)
2
>>> next(i)
3
>>> next(h)
3
대용량의 데이터를 처리할 때 사용하는 generator!! 잘 알고 넘어갑시다~~ 😆
'Computer Engineering > Python' 카테고리의 다른 글
[Pythonic한 코드 작성하기] 파이썬의 자식 프로세스 관리 모듈, subprocess (0) | 2021.04.21 |
---|---|
[Pythonic한 코드 작성하기] Python의 가변 인수(*args)와 키워드 인수에 대해 파헤쳐보자 (0) | 2021.02.25 |
[Pythonic한 코드 작성하기] 리스트 컴프리헨션 (list comprehension) (0) | 2021.02.03 |
파이썬에서 Generator란? (0) | 2021.01.27 |
파이썬에서 노션 API를 사용하여 뉴스 크롤링한 정보를 노션에 업로드하기 (notion-py) (0) | 2020.12.27 |
댓글
이 글 공유하기
다른 글
-
[Pythonic한 코드 작성하기] Python의 가변 인수(*args)와 키워드 인수에 대해 파헤쳐보자
[Pythonic한 코드 작성하기] Python의 가변 인수(*args)와 키워드 인수에 대해 파헤쳐보자
2021.02.25 -
[Pythonic한 코드 작성하기] 리스트 컴프리헨션 (list comprehension)
[Pythonic한 코드 작성하기] 리스트 컴프리헨션 (list comprehension)
2021.02.03 -
파이썬에서 Generator란?
파이썬에서 Generator란?
2021.01.27 -
파이썬에서 노션 API를 사용하여 뉴스 크롤링한 정보를 노션에 업로드하기 (notion-py)
파이썬에서 노션 API를 사용하여 뉴스 크롤링한 정보를 노션에 업로드하기 (notion-py)
2020.12.27