Python 튜토리얼의 수확량: Generator & 수익률과 수익률의 예

파이썬 수익률이란 무엇입니까?

Python의 Yield 키워드는 다음과 같은 반환값처럼 작동합니다.

차이점은 값을 반환하는 대신 generator 발신자에게 이의를 제기합니다.

함수가 호출되고 실행 스레드가 함수에서 Yield 키워드를 찾으면 함수 실행은 해당 줄 자체에서 중지되고 다음을 반환합니다. generator 발신자에게 다시 이의를 제기하십시오.

통사론

yield expression

상품 설명

Python Yield는 다음을 반환합니다. generator 목적. Generators는 값을 얻기 위해 반복해야 하는 특수 함수입니다.

Yield 키워드는 주어진 표현식을 다음으로 변환합니다. generator 돌려주는 함수 generator 물체. 객체의 값을 얻으려면 수율에 제공된 값을 읽어오기 위해 반복해야 합니다.

예: 수율법

다음은 수익률의 간단한 예입니다. testyield() 함수에는 "Welcome to Guru99"라는 문자열이 포함된 항복 키워드가 있습니다. 파이썬 튜토리얼“. 함수가 호출되면 출력이 인쇄되고 다음이 제공됩니다. generator 실제 값 대신 개체.

def testyield():
  yield "Welcome to Guru99 Python Tutorials"
output = testyield()
print(output)

출력:

<generator object testyield at 0x00000028265EB9A8>

주어진 출력은 generator 우리가 산출하기 위해 부여한 값을 갖는 객체입니다.

그러나 우리는 출력 결과를 양보하기 위해 제공해야 하는 메시지를 얻지 못하고 있습니다!

항복에 제공된 메시지를 인쇄하려면 다음을 반복해야 합니다. generator 아래 예에 표시된 대로 객체:

def testyield():
  yield "Welcome to Guru99 Python Tutorials"

output = testyield()
for i in output:
    print(i)

출력:

Welcome to Guru99 Python Tutorials

무엇인가 Generator파이썬에서요?

Generators는 iterable을 반환하는 함수입니다. generator 물체. 다음의 값은 generator 객체는 전체 목록을 함께 가져오는 대신 한 번에 하나씩 가져오므로 실제 값을 얻으려면 next() 또는 list() 메서드를 사용하여 for 루프를 사용할 수 있습니다.

사용 Generator 기능

당신은 만들 수 있습니다 generator사용 generator 기능과 사용 generator 표현.

A generator function은 일반 함수와 비슷합니다. 반환 값을 갖는 대신 Yield 키워드를 갖습니다.

를 만들려면 generator 함수에 항복 키워드를 추가해야 합니다. 추종자wing 예제에서는 생성 방법을 보여줍니다. generator 기능.

def generator():
    yield "H"
    yield "E"
    yield "L"
    yield "L"
    yield "O"

test = generator()
for i in test:
    print(i)

출력:

H
E
L
L
O

일반 함수 v/s의 차이점 Generator 기능.

어떻게 generator 기능은 일반 기능과 다릅니다.

Normal_test() 함수 2개와 generator_시험().

두 함수 모두 "Hello World" 문자열을 반환한다고 가정합니다. Normal_test()는 return을 사용하고 있으며 generator_test()는 수율을 사용하고 있습니다.

# Normal function
def normal_test():
    return "Hello World"
	
#Generator function
def generator_test():
	yield "Hello World"
print(normal_test()) #call to normal function
print(generator_test()) # call to generator function

출력:

Hello World
<generator object generator_test at 0x00000012F2F5BA20>

출력은 일반 함수 Normal_test()를 호출하면 Hello World 문자열을 반환한다는 것을 보여줍니다. 에 대한 generator return 키워드가 있는 함수generator 대상 generator문자열이 아닌 0x00000012F2F5BA20>의 _test입니다.

이것이 a와 a의 주요 차이점입니다. generator 기능과 일반 기능. 이제 generator for 루프 내부의 객체를 사용하거나 next() 메소드를 사용하거나 list()를 사용해야 합니다.

print(next(generator_test()))  # will output Hello World

일반 함수 v/s에 추가할 차이점이 하나 더 있습니다. generator 함수는 일반 함수를 호출할 때 실행이 시작되고 다음 단계에 도달하면 중지된다는 것입니다. 반환 그리고 그 값은 호출자에게 반환됩니다. 따라서 실행이 시작되면 중간에 일반 기능을 중지할 수 없으며 return 키워드를 발견할 때만 중지됩니다.

하지만 의 경우 generator 함수는 실행이 시작되면 첫 번째 산출물을 얻을 때 실행을 중지하고 반환합니다. generator 물체. 당신은 사용할 수 있습니다 generator 값을 가져오려면 개체를 사용하고 요구 사항에 따라 일시 중지하고 다시 시작하세요.

값을 읽는 방법 generator?

다음에서 값을 읽을 수 있습니다. generator list(), for-loop 및 next() 메소드를 사용하여 객체를 생성합니다.

사용 : 목록()

목록은 대괄호 안에 요소가 있는 반복 가능한 객체입니다. generator 객체는 모든 값에 generator 보류.

def even_numbers(n):
    for x in range(n):
       if (x%2==0): 
           yield x       
num = even_numbers(10)
print(list(num))

출력:

[0, 2, 4, 6, 8]

사용 : for-in

예제에는 정의된 n에 대해 모든 짝수를 제공하는 even_numbers() 함수가 정의되어 있습니다. even_numbers() 함수에 대한 호출은 다음을 반환합니다. generator for-loop 내부에서 사용되는 객체입니다.

예:

def even_numbers(n):
    for x in range(n):
       if (x%2==0): 
           yield x       
num = even_numbers(10)
for i in num:
    print(i)

출력:

0
2
4
6
8

next() 사용하기

next() 메소드는 목록, 배열 또는 객체의 다음 항목을 제공합니다. 목록이 비어 있고 next()가 호출되면 stopIteration 신호와 함께 오류가 반환됩니다. next()의 이 오류는 목록에 더 이상 항목이 없음을 나타냅니다.

def even_numbers(n):
    for x in range(n):
       if (x%2==0): 
           yield x       
num = even_numbers(10)
print(next(num))
print(next(num))
print(next(num))
print(next(num))
print(next(num))
print(next(num))

출력:

0
2
4
6
8
Traceback (most recent call last):
  File "main.py", line 11, in <module>
    print(next(num))
StopIteration

Generators는 일회용입니다

의 경우 generator한 번만 사용할 수 있습니다. 다시 사용하려고 하면 비어 있게 됩니다.

예 :

def even_numbers(n):
    for x in range(n):
       if (x%2==0): 
           yield x       
num = even_numbers(10)
for i in num:
    print(i)

print("\n")
print("Calling the generator again: ", list(num))

출력:

0
2
4
6
8
Calling the generator again:  []

출력을 다시 사용하려면 함수를 다시 호출해야 합니다.

예: Generator피보나치 시리즈의 s 및 수익률

더 폴로wing 예제에서는 사용 방법을 보여줍니다. generators 및 Python의 항복. 이 예에서는 피보나치 수열을 생성합니다.

def getFibonnaciSeries(num):
    c1, c2 = 0, 1
    count = 0
    while count < num:
        yield c1
        c3 = c1 + c2
        c1 = c2
        c2 = c3
        count += 1
fin = getFibonnaciSeries(7)
print(fin)
for i in fin:
    print(i)

출력:

<generator object getFibonnaciSeries at 0x0000007F39C8BA20>
0
1
1
2
3
5
8

예: Yield를 사용하여 함수 호출

이 예에서는 Yield를 사용하여 함수를 호출하는 방법을 살펴보겠습니다.

아래 예제에는 주어진 숫자의 제곱을 반환하는 test()라는 함수가 있습니다. return 키워드와 함께 test()를 사용하는 getSquare()라는 또 다른 함수가 있습니다. 출력은 주어진 숫자 범위에 대한 제곱 값을 제공합니다.

def test(n):
    return n*n

def getSquare(n):
    for i in range(n):
        yield test(i)

sq = getSquare(10)
for i in sq:
    print(i)

출력:

0
1
4
9
16
25
36
49
64
81

Python에서 Return 대신 Yield를 사용해야 하는 경우

Python3 수율 키워드는 generator 호출자에게 전달되고 코드 실행은 다음과 같은 경우에만 시작됩니다. generator 반복됩니다.

A 반환 함수에서는 함수 실행이 끝나고 단일 값이 호출자에게 다시 제공됩니다.

Return 대신 Yield를 사용해야 하는 상황은 다음과 같습니다.

  • 데이터 크기가 큰 경우 return 대신 Yield를 사용합니다.
  • 대규모 데이터 세트에서 더 빠른 실행이 필요할 때 Yield가 최선의 선택입니다.
  • 호출 함수에 큰 값 세트를 반환하려면 Yield를 사용하십시오.
  • 수율은 크거나 무한한 데이터를 생성하는 효율적인 방법입니다.

수익률 대 수익률

수익률과 수익률의 차이점은 다음과 같습니다.

수율 반품
Yield는 다음을 반환합니다. generator 호출자에게 객체를 보내고 코드 실행은 다음과 같은 경우에만 시작됩니다. generator 반복됩니다. 함수의 반환은 함수 실행의 끝이며 단일 값이 호출자에게 다시 제공됩니다.
함수가 호출되고 Yield 키워드를 만나면 함수 실행이 중지됩니다. 그것은 반환 generator 발신자에게 다시 이의를 제기하십시오. 함수 실행은 다음과 같은 경우에만 시작됩니다. generator 객체가 실행됩니다. 함수가 호출되면 실행이 시작되고 return 키워드가 있으면 호출자에게 값이 반환됩니다. 함수 내부의 반환은 함수 실행의 끝을 나타냅니다.
항복 표현 반환 표현식
Yield 키워드를 사용하면 메모리가 사용되지 않습니다. 반환된 값에 대해 메모리가 할당됩니다.
메모리를 사용하지 않아 대용량 데이터를 처리해야 하는 경우 매우 유용합니다. 매우 작은 데이터 크기에 편리합니다.
데이터 크기가 클 경우 Yield 키워드를 사용하면 성능이 더 좋습니다. 데이터 크기가 크면 메모리가 많이 사용되어 성능이 저하됩니다.
큰 데이터 크기에 대한 양보의 경우 실행 시간이 더 빠릅니다. 데이터 크기가 큰 경우 추가 처리가 수행되므로 사용되는 실행 시간이 더 길어지고 작은 데이터 크기에도 잘 작동합니다.

요약

  • Python의 Yield 키워드는 반환처럼 작동하지만 유일한 차이점은 값을 반환하는 대신 값을 반환한다는 것입니다. generator 호출자에게 기능을 제공합니다.
  • A generator 한 번 사용하면 다시 사용할 수 없는 특별한 유형의 반복자입니다. 값은 메모리에 저장되지 않으며 호출될 때만 사용할 수 있습니다.
  • 다음의 값은 generator for-in, list() 및 next() 메소드를 사용하여 읽을 수 있습니다.
  • 수익률과 수익률의 주요 차이점은 수익률이 generator 함수를 호출자에게 전달하고 return은 호출자에게 단일 값을 제공합니다.
  • Yield는 어떤 값도 메모리에 저장하지 않으며, 어떤 값도 메모리에 저장되지 않기 때문에 데이터 크기가 클 때 유용하다는 장점이 있습니다.
  • 데이터 크기가 큰 경우 return에 비해 Yield 키워드를 사용하면 성능이 더 좋습니다.