Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

Python에서 return 대신 yield를 사용하는 경우는 언제입니까?

<시간/>

즉, 제어가 프로그램의 return 문에 도달할 때마다 프로그램의 실행이 종료되고 나머지 문은 실행되지 않습니다.

그러나 yield의 경우 제어가 프로그램의 yield 문에 도달할 때마다 프로그램 실행이 일시 중지되고 나중에 기능에서 다른 문을 계속할 수 있습니다.

두 문장을 자세히 이해합시다.

수율

함수에서 yield 문을 사용하면 함수를 루프에서 사용할 수 있는 생성기 함수로 만듭니다. 함수가 실행 중이고 yield 문이 실행될 때 yield 이후의 값은 이를 호출한 루프로 다시 전달됩니다. 다음에 루프가 반복될 때 함수는 yield 문 바로 다음에 시작됩니다.

def func():
   yield 1
   yield 2
   yield 3

for num in func():
   print(num * num)

출력

1
4
9

위의 프로그램에서 함수를 호출하는 루프는 func 함수가 완료될 때 완료됩니다. - 함수의 끝(func()) 또는 return 문을 충족합니다.

그러나 동일한 생성기 함수를 사용하는 모든 새 루프는 처음부터 함수를 다시 실행합니다.

반환

반환 문,

  • 함수 실행을 중지하고 선택적으로 호출자에게 값을 반환하는 데 사용됩니다. return이 있는 함수(yield는 아님)는 루프에서 사용할 수 없습니다(위의 yield와 달리).

  • 이전에 실행한 함수가 다시 호출되면 함수가 처음부터 실행을 시작합니다(위의 yield와 다름).

return 또는 yield는 언제 사용합니까?

그러나 리소스 제약 때문에 시퀀스를 반복하고 싶거나 단순히 전체 시퀀스를 메모리에 저장하고 싶지 않을 때 yield를 사용하는 것이 좋습니다. 다른 경우에는 return 문을 사용할 수 있습니다.

yield 문을 사용하여 정수의 제곱을 생성하는 다른 프로그램을 살펴보겠습니다.

def Square():
   i = 1;
   # An Infinite loop to generate squares
   while True:
      yield i*i
      i += 1 # Next execution resumes from this point
for num in Square():
   if num > 100:
      break
   print(num)

출력

1
4
9
16
25
36
49
64
81
100

yield 문은 일반적으로 try ...의 try 절에서 사용되지 않습니다. finally 블록은 생성기가 다시 시작된다는 보장이 없으므로 finally 블록이 실행된다는 보장이 없기 때문입니다.