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

coldplay.xixi
Freigeben: 2020-08-19 17:08:30
nach vorne
3448 Leute haben es durchsucht

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
Nach dem Login kopieren

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)
Nach dem Login kopieren

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)))
Nach dem Login kopieren

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)
Nach dem Login kopieren
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!

Verwandte Etiketten:
Quelle:learnku.com
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!