>  기사  >  백엔드 개발  >  Python에서 Yield 키워드의 역할과 사용법에 대한 간략한 분석

Python에서 Yield 키워드의 역할과 사용법에 대한 간략한 분석

WBOY
WBOY원래의
2016-12-05 13:27:181410검색

머리말

Yield가 무엇인지 이해하려면 먼저 생성자(generator)가 무엇인지 이해해야 합니다. 생성자에 대해 이야기하기 전에 목록(iterator)을 만들 때 반복자(list)에 대해 알아보겠습니다. 각 항목을 하나씩 읽어나가는 것을 반복(iteration)이라고 합니다.

>>> mylist = [1, 2, 3]
>>> for i in mylist :
... print(i)
1
2
3

mylist 은 반복 가능한 객체입니다. 목록 이해를 사용하여 목록을 생성하면 반복 가능한 객체가 생성됩니다.

>>> mylist = [x*x for x in range(3)]
>>> for i in mylist :
... print(i)
0
1
4

"for··· in ···"을 사용하여 list, string, files과 같은 반복 가능한 객체를 조작할 수 있습니다. 이러한 반복 객체는 원하는 대로 반복해서 읽을 수 있기 때문에 사용하기 매우 편리합니다. . 하지만 모든 요소를 ​​미리 메모리에 저장해야 하며 해당 개체에 요소가 많으면 모든 항목이 유용하지는 않습니다.

생성기도 반복 가능한 객체이지만 모든 값을 메모리에 저장하지 않고 동적으로 값을 생성하므로 한 번만 읽을 수 있습니다.

>>> mygenerator = (x*x for x in range(3))
>>> for i in mygenerator :
... print(i)
0
1
4

[]를 ()로 바꾸는 것 외에는 별 차이가 없는 것 같습니다. 그러나 생성기는 한 번만 반복할 수 있기 때문에 for i in mygenerator를 다시 사용할 수 없습니다. 먼저 0을 계산하고 계속해서 1을 계산한 다음 4를 차례로 계산합니다...

yield 은 이 함수가 생성기를 반환한다는 점을 제외하면 return 과 유사한 키워드입니다.

>>> def createGenerator() :
... mylist = range(3)
... for i in mylist :
...  yield i*i
...
>>> mygenerator = createGenerator() # create a generator
>>> print(mygenerator) # mygenerator is an object!
<generator object createGenerator at 0xb7555c34>
>>> for i in mygenerator:
...  print(i)
0
1
4

이 예제 자체는 의미가 없지만 함수가 한 번만 읽을 수 있는 값 집합을 반환한다는 점을 명확하게 보여줍니다. Yield를 마스터하려면 가장 먼저 이해해야 할 것은 생성기 함수를 호출할 때, 위의 예 createGenerator() 에서와 같이 프로그램은 함수 본문의 코드를 실행하지 않고 생성기 개체만 반환합니다. 이 방법은 매우 미묘합니다. 함수 본문 내부의 코드는 생성기의 각 루프 반복(for)이 완료될 때까지 실행되지 않습니다.

첫 번째 반복에서는 함수가 실행되어 처음부터 yield 키워드에 도달한 다음 첫 번째 반복의 반환 값으로 yield 뒤의 값을 반환합니다. 그런 다음 이 함수가 실행될 때마다. , 계속 실행됩니다. 다음에 함수 내부에 정의한 루프에서 반환할 항목이 더 이상 남지 않을 때까지 해당 값을 다시 반환합니다.

yield 키워드가 생성기 내부에 정의되어 있지 않으면 생성기가 비어 있는 것으로 간주됩니다. 이는 루프가 부족하거나 if/else 조건이 충족되지 않기 때문에 발생할 수 있습니다.

요약

위 내용은 이 글의 전체 내용입니다. Python을 배우거나 사용하는 모든 분들께 이 글의 내용이 도움이 되기를 바랍니다. 궁금한 점이 있으면 메시지를 남겨주세요.

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.