Heim  >  Artikel  >  Backend-Entwicklung  >  Python-Ausbeute und Ausbeute aus Nutzungszusammenfassung und ausführlicher Erklärung

Python-Ausbeute und Ausbeute aus Nutzungszusammenfassung und ausführlicher Erklärung

coldplay.xixi
coldplay.xixinach vorne
2020-08-19 17:08:303473Durchsuche

Python-Ausbeute und Ausbeute aus Nutzungszusammenfassung und ausführlicher Erklärung

Zusammenfassung der Verwendung von Python yield und yield von

yield Funktion:

Hinweis: Die next()-Methode des Generators ist in Python 2 next(), in Python 3 jedoch __next__()【Es gibt zwei Unterstriche vor und nach dem nächsten】

Verwandeln Sie eine Funktion in einen Generator. Die Funktion mit yield ist keine gewöhnliche Funktion mehr. Das heißt: Eine Funktion mit yield ist ein Generator. Sie unterscheidet sich von einer gewöhnlichen Funktion. Das Generieren eines Generators sieht aus wie ein Funktionsaufruf, führt jedoch keinen Funktionscode aus, bis next() aufgerufen wird Eine for-Schleife next()) startet die Ausführung. Obwohl der Ausführungsablauf weiterhin entsprechend dem Ablauf der Funktion ausgeführt wird, wird er bei jeder Ausführung einer Yield-Anweisung unterbrochen und ein Iterationswert zurückgegeben. Die nächste Ausführung wird mit der nächsten Yield-Anweisung fortgesetzt. Es sieht so aus, als ob eine Funktion während der normalen Ausführung mehrmals durch yield unterbrochen wird und jede Unterbrechung den aktuellen Iterationswert über yield zurückgibt.

Die Vorteile von yield liegen auf der Hand. Das Umschreiben einer Funktion als Generator gibt ihr die Möglichkeit zur Iteration. Im Vergleich zur Verwendung einer Instanz einer Klasse zum Speichern des Status zur Berechnung des next()-Werts ist nicht nur der Code prägnant, sondern auch Der Ausführungsprozess ist äußerst klar.

Verwenden Sie print, um die Fibonacci-Folge zu drucken – Basisversion

#!/usr/bin/env python
# -*- coding: utf-8 -*-def fab(max):
    n , a, b = 0, 0 , 1
    while n < max:
        print(b)
        a, b = b, a + b
        n = n + 1if __name__ == &#39;__main__&#39;:
    fab(6)  # 1 1 2 3 5 8

Verwenden Sie yield, um die Fibonacci-Folge zu drucken – aktualisierte Version

#!/usr/bin/env python
# -*- coding: utf-8 -*-def fab(max):
    n , a, b = 0, 0 , 1
    while n < max:
        yield b
        a, b = b, a + b
        n = n + 1if __name__ == &#39;__main__&#39;:
    for n in fab(6): # 1 1 2 3 5 8
        print(n)

So beurteilen Sie, ob eine Funktion ein spezieller Generator ist. Funktion r
#!/usr/bin/env python
# -*- coding: utf-8 -*-from inspect import isgeneratorfunction

def fab(max):
    n , a, b = 0, 0 , 1
    while n < max:
        yield b
        a, b = b, a + b
        n = n + 1if __name__ == &#39;__main__&#39;:
    f1 = fab(3)
    # True fab是一个generator function
    print(isgeneratorfunction(fab))

    # False fab(3)不是一个generator function
    # 而fab(3)是调用fab返回的一个generator    print(isgeneratorfunction(fab(3)))

Verwenden Sie yield, um Implementieren Sie große Dateien, um

#!/usr/bin/env python
# -*- coding: utf-8 -*-def read_file(fpath):
    BLOCK_SIZE = 100
    with open(fpath, "rb") as f:
        while True:
            block = f.read(BLOCK_SIZE)
            if block:
                yield block            else:
                returnif __name__ == &#39;__main__&#39;:
    fpath = "/home/exercise-python3.7.1/vote/mysite/mysite/polls/test.txt"
    read_gen = read_file(fpath)

    print(read_gen.__next__())
    print(read_gen.__next__())
    print(read_gen.__next__())
    print(read_gen.__next__())

    # for循环会自动调用generatr的__next__()方法,故输出效果同如上的4个print  【内容较短,4个print就将test.txt中的内容输出完了】    for data in read_gen:
        print(data)

yield und yield from us zu lesen. Schlussfolgerung:

Aus dem Vergleich der beiden oben genannten Methoden ist ersichtlich, dass das Hinzufügen eines iterierbaren Objekts nach yield from jedes Element im iterierbaren Objekt eins ergeben kann um eins ist der Code prägnanter und die Struktur klarer.

Verwandte Lernempfehlungen: Python-Video-Tutorial

Das obige ist der detaillierte Inhalt vonPython-Ausbeute und Ausbeute aus Nutzungszusammenfassung und ausführlicher Erklärung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:learnku.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen