파이썬 생성기 이해

Zeeshan Afridi 2023년6월21일
  1. Python의 생성기
  2. 파이썬 생성기 이해
파이썬 생성기 이해

생성기 이해는 파이썬에서 생성기를 생성하는 똑똑하고 효율적인 방법입니다. 효율적으로 코딩하는 구문을 이해하는 데 필수적인 생성기를 정의하는 한 줄 사양입니다.

이 글에서는 파이썬의 제너레이터와 제너레이터 컴프리헨션을 예제와 함께 배웁니다.

Python의 생성기

Python의 제너레이터는 항목을 한 번에 순회하는 반복자를 만드는 데 사용되는 순회 객체 또는 순회 객체를 반환하는 함수입니다. 생성기는 내부 상태를 추적하기 위해 미리 정의된 iter()next() 함수로 반복자를 만드는 간단하고 쉬운 방법이며 StopInteration 예외도 처리합니다.

Python에서 반복을 생성하는 데는 많은 복잡성이 있는 반면 iter()next() 함수를 정의하고 구현해야 합니다. 이렇게 하는 것은 시간이 많이 걸리는 과정이지만 생성기 덕분입니다.

Python에서 생성기의 예를 살펴보겠습니다.

# A simple generator function
def my_gen():
    n = 1
    print(f"This is line number {n}")
    # generator function always contains the 'yield' Keyword
    yield n

    n += 1
    print(f"This is line number {n}")
    yield n

    n += 1
    print(f"This is line number {n}")
    yield n


print(my_gen())

출력:

<generator object my_gen at 0x00000150EA43E448>

위의 함수에서 yield를 사용하여 값을 생성기로 전환했습니다. my_gen() 함수를 인쇄했을 때 생성기를 반복하는 데 사용할 수 있는 함수의 개체를 얻었습니다.

생성기를 반복하는 예제를 살펴보겠습니다.

def even_nums():

    # create generator
    for i in range(11):
        if i % 2 == 0:
            yield i


print("This is the generator object of the generator function:", even_nums())

# iterate over the generator function
print("\nEven number from 0 to 11")
for i in even_nums():
    print(i, end=", ")

출력:

This is the generator object of the generator function: <generator object even_nums at 0x05ACC2D0>

Even number from 0 to 11
0, 2, 4, 6, 8, 10,

파이썬 생성기 이해

Generator comprehension은 Python의 list comprehension과 유사합니다. 그러나 괄호와 대괄호로 구별합니다. 익명 함수를 생성하는 람다 함수와 유사하게 작동하는 Python의 생성기 이해를 사용하여 간단한 생성기를 쉽게 생성할 수 있습니다.

Generator Comprehension과 List Comprehension의 차이점은 Generator Comprehension은 하나의 항목을 동시에 생성하는 반면 List Comprehension은 전체 목록을 동시에 생성한다는 것입니다. Generator Comprehension은 훨씬 빠르고 메모리 효율적입니다.

Python에서 생성기 이해의 예를 살펴보겠습니다.

# generator comprehension in python
# take the square of each number from 1-6 and store it in 'gen'
gen = (x ** 2 for x in range(1, 6))

print(gen)  # return --> generator object

# iterate over the generator 'gen'
for i in gen:
    print(i, end=", ")

출력:

<generator object <genexpr> at 0x00000150EA43EC48>
1, 4, 9, 16, 25,

위의 코드 예제에서 생성기 표현식은 요청 시 필요한 결과를 생성했지만 즉시 생성하지는 않았습니다. 나중에 for 루프를 사용하여 생성기를 반복하는 데 사용한 생성기의 개체를 반환했습니다.

생성기가 값의 순서와 상태를 관리하므로 next() 함수를 사용하여 생성기의 각 값을 순차적으로 인쇄할 수 있습니다.

# generator comprehension in python
# take the square of each number from 1-6 and store it in 'gen'
gen = (x ** 2 for x in range(1, 6))

# next()
print(next(gen))
print(next(gen))
print(next(gen))
print(next(gen))
print(next(gen))

출력:

1
4
9
16
25

보시다시피 next()를 사용하여 온디맨드 값을 얻고 각 next() 함수 다음에 다음 값을 가져올 때 값의 순서를 관리합니다.

Zeeshan Afridi avatar Zeeshan Afridi avatar

Zeeshan is a detail oriented software engineer that helps companies and individuals make their lives and easier with software solutions.

LinkedIn

관련 문장 - Python Generator