파이썬 강의 노트 - 반복자와 발생자 ITERATORS AND GENERATORS

반복자와 발생자 ITERATORS AND GENERATORS

앞서 배운 리스트 LIST 는 이터러블 ITERABLE 의 한 종류입니다. 여러 가지 요인을 한 번에 가지는 특성을 가지고 있는 경우는 이터러블이라고 부릅니다. 

반복자 ITERATOR 는 데이터의 흐름이 있는 구조로, 리스트와는 다릅니다. 

반복자는 발생자 GENERATOR 를 통해 쉽게 생성할 수 있습니다. 
def my_range(x):
    i = 0
    while i < x:
        yield i
        i += 1
위의 함수는 발생자 함수의 예시입니다. 
보통 함수와 다른 점은  yield  라는 문자열을 포함합니다. 

발생자 GENERATOR 를 사용하는 이유

리스트 같은 이터러블 형태 보다 메모리를 적게 사용합니다.

활용 예시

예시 1:
lessons = ["Why Python Programming", "Data Types and Operators", "Control Flow", "Functions", "Scripting"]

def my_enumerate(iterable, start=0):
    count = start
    for element in iterable:
        yield count, element
        count += 1

for i, lesson in my_enumerate(lessons, 1):
    print("Lesson {}: {}".format(i, lesson))
결과:
Lesson 1: Why Python Programming
Lesson 2: Data Types and Operators
Lesson 3: Control Flow
Lesson 4: Functions
Lesson 5: Scripting
예시 2:
def chunker(iterable, size):
    """Yield successive chunks from iterable of length size."""
    for i in range(0, len(iterable), size):
        yield iterable[i:i + size]

for chunk in chunker(range(25), 4):
    print(list(chunk))
결과:
[0, 1, 2, 3]
[4, 5, 6, 7]
[8, 9, 10, 11]
[12, 13, 14, 15]
[16, 17, 18, 19]
[20, 21, 22, 23]
[24]

간단한 GENERATOR 표현법

sq_list = [x**2 for x in range(10)]  # 정사각형 리스트 생성

sq_iterator = (x**2 for x in range(10))  # 정사각형 이터레이터 생성




Comments

Popular Posts