파이썬 생성기 이해
생성기 이해는 파이썬에서 생성기를 생성하는 똑똑하고 효율적인 방법입니다. 효율적으로 코딩하는 구문을 이해하는 데 필수적인 생성기를 정의하는 한 줄 사양입니다.
이 글에서는 파이썬의 제너레이터와 제너레이터 컴프리헨션을 예제와 함께 배웁니다.
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 is a detail oriented software engineer that helps companies and individuals make their lives and easier with software solutions.
LinkedIn