제너레이터 표현식 소개

Python 도구 상자

Hugo Bowne-Anderson

Data Scientist at DataCamp

제너레이터 표현식

  • 리스트 컴프리헨션 복습
[2 * num for num in range(10)]
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
  • [ ] 대신 ( ) 사용
(2 * num for num in range(10))
<generator object <genexpr> at 0x1046bf888>
Python 도구 상자

리스트 컴프리헨션 vs. 제너레이터

  • 리스트 컴프리헨션 - 리스트 반환
  • 제너레이터 - 제너레이터 객체 반환
  • 둘 다 순회 가능
Python 도구 상자

제너레이터 값 출력 (1)

result = (num for num in range(6))

for num in result: print(num)
0
1
2
3
4
5
result = (num for num in range(6))

print(list(result))
[0, 1, 2, 3, 4, 5]
Python 도구 상자

제너레이터 값 출력 (2)

result = (num for num in range(6))
  • 지연 평가
print(next(result))
0
print(next(result))
1
print(next(result))
2
print(next(result))
3
print(next(result))
4
Python 도구 상자

제너레이터 vs. 리스트 컴프리헨션

Python 도구 상자

제너레이터 vs. 리스트 컴프리헨션

Python 도구 상자

제너레이터 vs. 리스트 컴프리헨션

Python 도구 상자

제너레이터 표현식의 조건문

even_nums = (num for num in range(10) if num % 2 == 0)

print(list(even_nums))
[0, 2, 4, 6, 8]
Python 도구 상자

제너레이터 함수

  • 호출 시 제너레이터 객체 생성
  • 일반 함수처럼 정의 - def
  • 단일 값 반환 대신 값의 시퀀스를 생성
  • yield 키워드로 값 생성
Python 도구 상자

제너레이터 함수 작성

  • sequence.py
def num_sequence(n):
    """Generate values from 0 to n."""
    i = 0
    while i < n:
        yield i
        i += 1
Python 도구 상자

제너레이터 함수 사용

result = num_sequence(5)

print(type(result))
<class 'generator'>
for item in result:
    print(item)
0
1
2
3
4
Python 도구 상자

연습해 봅시다!

Python 도구 상자

Preparing Video For Download...