Heim  >  Artikel  >  Backend-Entwicklung  >  Die Definition und Verwendung von Pythons Ertrag

Die Definition und Verwendung von Pythons Ertrag

零到壹度
零到壹度Original
2018-03-29 15:24:215935Durchsuche


yeild ist einfach ein Generator. Ein Generator ist eine Funktion, die sich die letzte Position im Funktionskörper merkt . Der zweite (oder n-te) Aufruf einer Generatorfunktion springt in die Mitte der Funktion und lässt alle lokalen Variablen gegenüber dem vorherigen Aufruf unverändert.

Der Generator ist eine Funktion

Alle Parameter der Funktion bleiben erhalten

Die zweites Mal Die beim Aufruf dieser Funktion verwendeten Parameter sind diejenigen, die beim vorherigen Mal übrig geblieben sind

Der Generator „merkt“ sich auch seinen Datenstatus. Denken Sie auch an seine Position im Flusskontrollkonstrukt.

Der Betriebsmechanismus des Generators

Wenn Sie den Generator auffordern, eine Zahl zu generieren, wird der Generator ausgeführt, bis die yeild-Anweisung erscheint, und der Generator gibt Ihnen die Parameter von yeild und dann die Der Generator läuft nicht herunter. Wenn Sie ihn nach der nächsten Zahl fragen, läuft er vom letzten Zustand aus weiter, bis die Yield-Anweisung erscheint, gibt Ihnen die Parameter und stoppt dann usw., bis er die Funktion verlässt

Um den Ertragsmechanismus zu verstehen, müssen wir verstehen, was ein Generator ist. Zuvor stellen wir Iteratoren vor.

Iterables

Wenn Sie eine Liste erstellen, können Sie diese einzeln abrufen namens Iteration:

<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 ist ein Iterator. Wenn Sie es als Liste verstehen, ist es iterierbar:

<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>


Alles, was mit for in iterativ gelesen werden kann, wie z. B. Listen, Zeichenfolgen und Dateien, sind sehr praktisch, da Sie so viel verwenden können, wie Sie möchten um alle Werte zu speichern, von denen es völlig unnötig ist, sie jedes Mal im Speicher zu behalten.

Generators

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

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”的条件.

Verwandte Empfehlungen:

Eine kurze Analyse der Python-Ausbeute

Eine kurze Analyse der Python-Ertragsanalyse

Das obige ist der detaillierte Inhalt vonDie Definition und Verwendung von Pythons Ertrag. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn