파이썬의 생성기

생산하다



Yield는 함수가 yield 키워드를 만날 때마다 함수의 실행을 일시 중지하고 로컬을 유지함으로써 지정된 값을 던집니다. 메모리.

# Function which yields the numbers.
def normal_yield ():
    yield 1
    yield 2
    yield 3

# iterate over the numbers
for value in normal_yield() :
    print (value)


호출 함수 실행이 중지될 때마다 제어는 호출된 함수에서 yield 키워드 아래의 다음 줄로 넘어갑니다.

# Program to count numbers 1 to 10.
def number_count ():
    # value initialization.
    i = 0
    # infinite loop.
    while True:
        yield i
        # after function called, flow execution starts from here.
        i = i + 1

# Priting the values.
for count in number_count ():
    if count > 10 :
        break
    print (count)


반복자



목록이 생성된 후 next() 반복기 함수를 사용하여 목록을 반복할 수도 있습니다. 'for in' 루프가 실행 시간의 경우 next() 메서드보다 훨씬 편리하지만.

def square_number (nums):
    for i in nums:
        yield (i*i)

#variable holding the yielded number
my_nums = square_number ([1,2,3,4,5])

#iterating using the next() functions
print (next(my_nums))
print (next(my_nums))
print (next(my_nums))
print (next(my_nums))
print (next(my_nums))  


발전기



생성기는 우리가 정의하는 일반 파이썬 함수와 비슷하지만 함수가 정의에 'yield' 키워드를 포함하면 함수는 생성기 함수가 됩니다. yield는 제너레이터 기능을 하는 키워드입니다.

def compute ():
    i=0
    while True:
      yield i
      i = i + 1

for check in compute ():
    if check % 2 == 0:
        print(str(check) + " is Even")
    elif check > 10:
        break


수익률 대 수익률



1. 반환



함수가 실행될 때마다 return 문은 프로세스가 완료될 때까지 기다려야 하며 함수 실행이 끝난 후 호출하는 함수에 전체 변수 또는 목록을 반환합니다. 이것은 전체 목록의 메모리를 차지할 뿐만 아니라 실행에 약간의 시간이 걸립니다. 다음에 동일한 기능을 실행하려면 처음부터 실행됩니다.

def square_numbers (nums):
    result = []
    for i in nums:
        result.append (i*i)
    #return has to wait to process the above statements.
    return result
my_number = square_numbers ([1,2,3,4,5])
print (my_number)


2. 수율



함수가 yield 키워드를 만나면 실행을 일시 중지하고 로컬 메모리를 그대로 유지하면서 값을 호출 함수로 보냅니다. 호출 함수가 작업을 실행한 후 프로세스는 함수 정의에서 yield의 다음 줄로 돌아갑니다. 이를 통해 실행 속도가 유지되고 메모리 공간도 거의 차지하지 않습니다.

def number_square (nums):
    for i in nums:
        yield (i*i)
numbers = number_square ([1,2,3,4,5])
for value in numbers:
    print (value)


발전기의 장점:


  • 생성기로 많은 데이터 세트를 사용하여 더 나은 방식으로 작동
    전체를 반환하는 대신 한 번에 하나의 값만 던집니다.
    반환과 같은 목록.
  • Return 문은 메모리에서 많은 공간을 소비하며 또한
    제너레이터는 그렇지 않은 반면 실행에 더 많은 시간이 걸립니다.
  • Return을 사용하면 함수가 처음부터 실행할 수 있습니다.
    yield는 그 아래의 명령문만 실행하고 로컬을 유지합니다.
    변수에 대한 메모리.

  • 발전기의 단점:


  • 발전기의 유일한 단점은
    일반적으로 사용되며 덜 유명합니다.
  • 좋은 웹페이지 즐겨찾기