yeild는 단순히 생성기입니다. 생성기는 마지막으로 반환되었을 때 함수 본문의 위치를 기억하는 함수입니다. 생성기 함수에 대한 두 번째(또는 n번째) 호출은 함수의 중간으로 이동하며 모든 지역 변수는 이전 호출에서 변경되지 않은 상태로 유지됩니다.
생성기는 함수입니다
함수의 모든 매개변수는 유지됩니다
이 함수를 두 번째 호출할 때 사용되는 매개변수는 이전에 남겨진 매개변수입니다
생성기 또한 데이터 상태를 "기억"합니다. 또한 흐름 제어 구조에서의 위치도 기억하세요.
생성기의 작동 메커니즘
생성기에 숫자 생성을 요청하면 생성기는 yeild 문이 나타날 때까지 실행되며, 생성기는 다음을 수행합니다. yeild 매개변수가 제공되면 생성기가 더 이상 실행되지 않습니다. 다음 숫자를 물으면 Yield 문이 나타날 때까지 마지막 상태부터 계속 실행하고, 매개변수를 제공한 다음 중지하고, 함수가 종료될 때까지 반복합니다.
Yield의 메커니즘을 이해하려면, 우리는 발전기가 무엇인지 이해해야 합니다. 그 전에 반복자를 소개하겠습니다.
목록을 만들 때 하나씩 가져올 수 있습니다. 이런 종류의 목록을 반복이라고 합니다.
<span style="font-size: 16px;">>>> mylist = [1, 2, 3]<br>>>> for i in mylist:<br>... print(i)<br>1<br>2<br>3<br></span>
Mylist는 목록으로 이해하면 됩니다. , iterable:
<span style="font-size: 16px;">>>> mylist = [x*x for x in range(3)]<br>>>> for i in mylist:<br>... print(i)<br>0<br>1<br>4<br></span>
for in을 사용하여 반복적으로 읽을 수 있는 모든 것은 목록, 문자열, 파일과 같은 반복 컨테이너입니다. 이러한 반복자는 원하는 것을 얻을 수 있기 때문에 매우 편리합니다. 원하는 만큼 가져오되 모든 값을 저장해야 하며 그 중 많은 값은 매번 메모리에 보관할 필요가 전혀 없습니다.
Generators(生成器)也是可迭代的,但是你每次只能迭代它们一次,因为不是所有的迭代器都被一直存储在内存中的,他们临时产生这些值:
<span style="font-size: 16px;">>>> mygenerator = (x*x for x in range(3))<br>>>> for i in mygenerator:<br>... print(i)<br>0<br>1<br>4<br></span>
生成器几乎和迭代器是相同的,除了符号[]变为()。但是你无法用两次,因为他们只生成一次:他们生成0然后丢弃,继续统计1,接着是4,一个接着一个。
Yield的用法有点像return,除了它返回的是一个生成器,例如:
<span style="font-size: 16px;">>>> def createGenerator():<br>... mylist = range(3)<br>... for i in mylist:<br>... yield i*i<br>...<br>>>> mygenerator = createGenerator() # create a generator<br>>>> print(mygenerator) # mygenerator is an object!<br><generator object createGenerator at 0xb7555c34><br>>>> for i in mygenerator:<br>... print(i)<br>0<br>1<br>4<br></span>
上面的例子几乎非常积累,但是它很好的阐释了yield的用法,我们可以知道createGenerator()生成的是一个生成器。
为了掌握yield的精髓,你一定要理解它的要点:当你调用这个函数的时候,你写在这个函数中的代码并没有真正的运行。这个函数仅仅只是返回一个生成器对象。有点过于奇技淫巧:-)
然后,你的代码会在每次for使用生成器的时候run起来。
现在是解释最难的地方:
当你的for第一次调用函数的时候,它生成一个生成器,并且在你的函数中运行该循环,知道它生成第一个值。然后每次调用都会运行循环并且返回下一个值,知道没有值返回为止。该生成器背认为是空的一旦该函数运行但是不再刀刀yield。之所以如此是因为该循环已经到达终点,或者是因为你再也不满足“if/else”的条件.
관련 추천:
위 내용은 파이썬의 수확량의 정의와 사용법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!