logo

Python의 생성기

Python의 Generator는 Yield 키워드를 사용하여 반복자를 반환하는 함수입니다. 이 기사에서는 Python에서 생성기 함수가 작동하는 방식에 대해 설명합니다.

Python의 생성기 함수

Python의 생성기 함수는 일반 함수처럼 정의되지만 값을 생성해야 할 때마다 다음을 사용하여 수행합니다. 수익률 키워드 돌아오는 것보다. def의 본문에 항복이 포함되어 있으면 함수는 자동으로 Python 생성기 함수가 됩니다.



Python에서 생성기 만들기

Python에서는 def 키워드와 Yield 키워드를 사용하여 생성기 함수를 만들 수 있습니다. 생성기의 구문은 다음과 같습니다. 파이썬 :

def function_name():  yield statement>

예:

이 예에서는 세 개의 정수를 생성하는 간단한 생성기를 만듭니다. 그런 다음 Python을 사용하여 이러한 정수를 인쇄합니다. for 루프 .



파이썬3






# A generator function that yields 1 for first time,> # 2 second time and 3 third time> def> simpleGeneratorFun():> >yield> 1> >yield> 2> >yield> 3> > # Driver code to check above generator function> for> value>in> simpleGeneratorFun():> >print>(value)>

>

>

산출:

1 2 3>

생성기 개체

Python 생성기 함수는 반복 가능한 생성기 개체를 반환합니다. 반복자 . 생성기 개체는 생성기 개체의 next 메서드를 호출하거나 for in 루프에서 생성기 개체를 사용하여 사용됩니다.

예:

이 예에서는 Python에서 간단한 생성기 함수를 만들어 다음을 사용하여 객체를 생성합니다. 다음() 함수 .

해시셋 대 해시맵

파이썬3




# A Python program to demonstrate use of> # generator object with next()> > # A generator function> def> simpleGeneratorFun():> >yield> 1> >yield> 2> >yield> 3> > # x is a generator object> x>=> simpleGeneratorFun()> > # Iterating over the generator object using next> > # In Python 3, __next__()> print>(>next>(x))> print>(>next>(x))> print>(>next>(x))>

>

이진 검색 트리와 이진 트리
>

산출:

1 2 3>

예:

이 예에서는 피보나치 수에 대한 두 개의 생성기를 생성합니다. 첫 번째는 간단한 생성기이고 두 번째는 다음을 사용하는 생성기입니다. for 루프 .

파이썬3




# A simple generator for Fibonacci Numbers> def> fib(limit):> > ># Initialize first two Fibonacci Numbers> >a, b>=> 0>,>1> > ># One by one yield next Fibonacci Number> >while> a yield a a, b = b, a + b # Create a generator object x = fib(5) # Iterating over the generator object using next # In Python 3, __next__() print(next(x)) print(next(x)) print(next(x)) print(next(x)) print(next(x)) # Iterating over the generator object using for # in loop. print(' Using for in loop') for i in fib(5): print(i)>

>

>

산출:

0 1 1 2 3  Using for in loop 0 1 1 2 3>

Python 생성기 표현식

Python에서 생성기 표현식은 생성기 함수를 작성하는 또 다른 방법입니다. 이는 Python을 사용합니다. 목록 이해 기술이지만 메모리의 목록에 요소를 저장하는 대신 생성기 개체를 만듭니다.

생성기 표현식 구문

Python의 생성기 표현식에는 다음 구문이 있습니다.

(expression for item in iterable)>

예:

이 예에서는 2로 나눌 수 있는 0에서 5 사이의 5의 배수를 인쇄하는 생성기 개체를 만듭니다.

파이썬3




# generator expression> generator_exp>=> (i>*> 5> for> i>in> range>(>5>)>if> i>%>2>=>=>0>)> > for> i>in> generator_exp:> >print>(i)>

>

>

문자열 연결 자바

산출:

0 10 20>

Python의 생성기 응용

피보나치 수열을 생성한다고 가정해 보겠습니다. 생성기 접근 방식을 채택하면 간단해집니다. 우리는 숫자의 흐름이 언제, 어디서 끝나는지에 대해 고민하지 않고 다음 피보나치 수를 얻기 위해 next(x)를 호출하기만 하면 됩니다. 보다 실용적인 유형의 스트림 처리는 로그 파일과 같은 대용량 데이터 파일을 처리하는 것입니다. 생성기는 특정 시점에 파일의 일부만 처리되므로 데이터 처리를 위한 공간 효율적인 방법을 제공합니다. 이러한 목적으로 Iterator를 사용할 수도 있지만 Generator는 빠른 방법을 제공합니다(여기서는 __next__ 및 __iter__ 메소드를 작성할 필요가 없습니다).