Python의 생성기는 무엇이며 어떻게 사용합니까?



장점과 함께 Python의 생성기가 무엇인지 알아보십시오. 또한 다양한 사용 사례와 함께이를 만들고 사용하는 방법을 배웁니다.

반복 가능한 객체 또는 객체를 생성하는 것은 부담스러운 작업으로 간주됩니다. 하지만 ,이 고통스러운 작업의 구현이 정말 순조로워집니다. 그럼 계속해서 Python의 Generators를 자세히 살펴 보겠습니다.

이 기사에서 다루는 모든 주제 목록은 다음과 같습니다.





그럼 시작하겠습니다. :)

Python의 생성기는 무엇입니까?

생성기는 기본적으로 순회 가능한 객체 또는 항목을 반환하는 함수입니다. 이러한 기능은 한 번에 모든 항목을 생성하지 않고 필요할 때만 한 번에 하나씩 생성합니다. 때마다 항목 집합을 반복하기 위해 포함 된 경우 생성기 함수가 실행됩니다. 발전기에는 많은 장점이 있습니다.



발전기 사용의 장점

  • Python의 Generator가 없으면 iterable을 생성하는 것은 매우 어렵고 길다.

  • 생성기는 자동으로 __iter __ (), __next __ () 및 StopIteration을 구현하므로 구현하기 쉽습니다. 그렇지 않으면 명시 적으로 지정해야합니다.



  • 평소와 달리 필요에 따라 아이템이 생산되므로 메모리가 절약됩니다. . 이 사실은 엄청난 수의 반복자를 만들어야 할 때 매우 중요합니다. 이것은 또한 발전기의 가장 큰 장점으로 간주됩니다.

    자바 프로그램의 일부
  • 무한한 수의 아이템을 생산하는 데 사용할 수 있습니다.

  • 또한 여러 작업을 파이프 라인하는 데 사용할 수 있습니다.

일반 함수와 생성기 함수 :

Python의 생성기는 생성하는 방식과 동일하게 생성됩니다. ‘def’키워드를 사용합니다. 그러나 Generator 함수는 return 대신 yield 키워드를 사용합니다. 이것은 이것이 반복자임을 인터프리터에게 알리기 위해 수행됩니다. 뿐만 아니라 Generator 함수는 일반 함수의 경우와 같이 이름이 아니라 next () 함수가 호출 될 때 실행됩니다. 더 잘 이해하려면 다음 예제를 고려하십시오.

예:

def func (a) : a = [1,2,3] b = func (a) next (b) 산출

산출: [1, 2, 3]

보시다시피 위의 출력에서 ​​func ()는 yield 키워드와 그 실행을 위해 next 함수를 사용하고 있습니다. 그러나 정상적인 기능을 위해서는 다음 코드가 필요합니다.

예:

def func (a) : a = [1,2,3] func (a) 반환

산출: [1, 2, 3]

위의 예를 보면 일반 함수도 동일한 출력을 반환 할 때 Generator 함수를 사용해야하는 이유가 궁금 할 것입니다. 그럼 계속해서 Python에서 Generator를 사용하는 방법을 살펴 보겠습니다.

Generator 기능 사용 :

앞서 언급했듯이 Python의 Generator는 한 번에 하나씩 반복 가능 항목을 생성합니다. 다음 예를 살펴보십시오.

예:

def myfunc (a) : while a> = 3 : yield a a = a + 1 b = myfunc (a) print (b) next (b)

다음 함수를 실행하면 다음 출력이 표시됩니다.

산출: 4

여기에서는 while 조건을 만족하는 하나의 반복 가능한 객체가 반환되었습니다. 실행 후 제어가 호출자에게 전송됩니다. 더 많은 항목이 필요한 경우 next () 함수를 호출하여 동일한 함수를 다시 실행해야합니다.

다음 (b)

산출: 5

추가 실행시 함수는 6,7 등을 반환합니다. Python의 생성기 함수는 __iter __ () 및 __next __ () 메서드를 자동으로 구현합니다. 따라서 next () 메서드를 사용하여 객체를 반복 할 수 있습니다. 항목 생성이 종료되어야 할 때 Generator 함수는 StopIteration 내부적으로는 발신자를 걱정할 필요가 없습니다. 여기에 또 다른 예가 있습니다.

예:

a = 2 def myfunc (a) : while a> = 0 : yield a a-= 1 b = myfunc (a) print (b) next (b)

산출:

Python-Edureka의 StopIteration-Generators위의 이미지는 프로그램 실행에 필요한 횟수를 보여줍니다. 다음 함수를 다시 호출하려고하면 다음을 나타내는 메시지가 반환됩니다. StopIteration 구현되었습니다. 일반 함수로이 작업을 수행하려고하면 반환 된 값이 변경되거나 반복되지 않습니다. 아래 예를 살펴보십시오.

예:

def z () : n = 1 수율 n n = n + 3 수율 n p = z () next (p)

산출:

루프가있는 생성기 :

같은 함수를 한번에 실행하고 싶다면 'for'루프를 사용하면됩니다. 이 루프는 객체에 대한 반복을 돕고 모든 구현 후에 StopIteration을 실행합니다.

예:

def z () : n = 1 yield n n = n + 3 yield n for x in z () : print (x)

산출:

하나
4

반복 가능한 객체를 생성하는 표현식을 지정할 수도 있습니다.

생성기 표현식 :

반복자를 생성하기 위해 for 루프와 함께 표현식을 사용할 수도 있습니다. 이것은 일반적으로 생성을 훨씬 쉽게 만듭니다. 생성기 표현은 목록 이해력과 유사합니다. 람다 함수 , 생성기 표현식은 익명의 생성기 함수를 만듭니다.

아래 예를 살펴보십시오.

예:

a = range (6) print ( 'List Comprehension', end = ':') b = [x + 2 for x in a] print (b) print ( 'Generator expression', end = ': n') c = (a에서 x의 경우 x + 2) c에서 y의 경우 print (c) : print (y)

산출:

목록 이해력 : [2, 3, 4, 5, 6, 7]

생성기 표현 :

자바에서 스캐너는 무엇입니까

2

4
5
6

보시다시피, 위의 출력에서 ​​첫 번째 표현식은 [] 대괄호 안에 지정된 목록 이해입니다. 목록 이해는 한 번에 전체 항목 목록을 생성합니다. 다음은 동일한 항목을 한 번에 하나씩 반환하는 생성기 표현식입니다. () 대괄호를 사용하여 지정됩니다.


발전기함수는 다른 함수 내에서도 사용할 수 있습니다.예를 들면 :

예:

a = range (6) print ( 'Generator expression', end = ': n') c = (x in a) print (c) print (min (c))

산출:

생성기 표현
2

위의 프로그램은 a의 값에 위의식이 적용될 때 최소값을 출력합니다.

사용 사례:

Generators를 에:

  • 피보나치 시리즈 생성
  • 숫자 생성

피보나치 시리즈 생성 :

우리 모두가 알고있는 피보나치 수열은 일련의 수로, 각 수는 앞의 두 수의 합입니다. 처음 두 숫자는 0과 1입니다. 다음은 피보나치 수열을 생성하는 생성 프로그램입니다.

예:

def fibo () : first, second = 0,1 while True : yield first first, second = second, first + second for x in fibo () : if x> 50 : break print (x, end = '')

산출:

012 3 5 8 13 21 34

위의 출력은 값이 50 미만인 피보나치 수열을 보여줍니다. 이제 숫자 목록을 생성하는 방법을 살펴 보겠습니다.

번호 생성 :

지정된 목록 번호를 생성하려는 경우 생성기 함수를 사용하여 수행 할 수 있습니다. 다음 예를 살펴보십시오.

예:

a = range (10) b = (x for x in a) print (b) for y in b : print (y)

산출:

0
하나
2

4
5
6
7
8
9

예:

a = range (2,10,2) b = (x for x in a) print (b) for y in b : print (y)

산출:


2
4
6
8

위의 프로그램은 2에서 10까지의 짝수를 반환했습니다. 이것은 Python의 Generators에 대한이 기사의 끝으로 이동합니다. 모든 주제를 이해 하셨기를 바랍니다.

c에서 연결 목록 구현
가능한 한 많이 연습하고 경험을 되 돌리십시오.

질문이 있으십니까? 이 'Python의 생성기'블로그의 댓글 섹션에 언급 해 주시면 가능한 한 빨리 답변을 드리겠습니다.

다양한 응용 프로그램과 함께 Python에 대한 심층적 인 지식을 얻으려면 라이브에 등록 할 수 있습니다. 연중 무휴 지원 및 평생 액세스.