[PYTHON] Generatorfunktion auch in JavaScript

Die Generatorfunktion ist schwer zu erklären, aber kurz gesagt, es ist eine "Funktion, die einen Wert in kleinen Mengen zurückgibt (eine Funktion, die erzeugt)". In Python können Sie es beispielsweise so verwenden. Es kann eine Funktion genannt werden, die einen Kursivator erstellt.

def firstn(n):
    num = 0
    while num < n:
        yield num
        num += 1

gen = firstn(10)

print gen.next() # —> 0
print gen.next() # —> 1
print gen.next() # —> 2
…
print gen.next() # —>11. Mal tritt eine StopIteration-Ausnahme auf

Natürlich kann es auch für Schleifen und Listeneinschlussnotationen verwendet werden.

for n in firstn(10):
    print n,
# —> 0 1 2 3 4 5 6 7 8 9

print [n for n in firstn(10)]
# -> [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

Es scheint also, dass diese Generatorfunktion auch in JavaScript verwendet werden kann. Es wird offiziell in ES6 (ECMAScript Version 6) standardisiert, aber einige Implementierungen haben bereits begonnen, diese Funktion zu integrieren.

Node.js wird auch in der nächsten stabilen Version v0.12 offiziell übernommen, sodass der Generator in v0.11 verwendet werden kann. Also habe ich es versucht.

Schreiben Sie zunächst das obige Beispiel in JavaScript neu.

firstn = function* (n) {
    var num = 0
    while (num < n) {
        yield num
        num += 1
	}
};

gen = firstn(10);

console.log(gen.next()); // —> { value: 0, done: false }
console.log(gen.next()); // —> { value: 1, done: false }
console.log(gen.next()); // —> { value: 2, done: false }
…
console.log(gen.next()); // —>11. Mal{ value: undefined, done: true }Kehrt zurück

Der Unterschied zu Python besteht darin, dass kein Wert zurückgegeben wird, sondern ein Objekt mit zwei Attributen, value und done. Wenn die Iteration beendet ist, ist done wahr, anstatt eine Ausnahme auszulösen.

Verwenden Sie zur Laufzeit node - harmony. "Harmony" scheint der Codename von ES6 zu sein.

Und dies kann auch in einer for-Schleife verwendet werden

for (n of firstn(10)) {
	process.stdout.write(n + " ");
}
// —> 0 1 2 3 4 5 6 7 8 9 

Es scheint, dass die Notation zur Aufnahme von Listen in ES6 verfügbar sein wird, sie wird jedoch in der aktuellen Version (0.11.9) nicht unterstützt. Es tut uns leid.

Recommended Posts

Generatorfunktion auch in JavaScript
[Python] Generatorfunktion
Dualität in der Funktion
Funktionen parallel ausführen
Zundokokiyoshi (Generator) in Python
Covector, um in Funktion zu denken
Erstellen Sie eine Funktion in Python
ntile (Dezil) -Funktion in Python
Implementiere die Timer-Funktion im Pygame
Nichtlineare Funktionsmodellierung in Python
Zeichne die Yin-Funktion in Python
Sofortige Funktion (Lüge) in Python
Erstellen Sie eine Benutzerauthentifizierungsfunktion in Airflow
Sortierwarnung in der Funktion pd.concat
Definition des Funktionsargumenttyps in Python
Implementierung der Login-Funktion in Django
Unendlicher Primgenerator in Python3
Schreiben Sie die AWS Lambda-Funktion in Python
Generator
Messen Sie die Ausführungszeit von Funktionen in Python
Funktionssynthese und Anwendung in Python
Machen Sie einen Vorhanggenerator mit Blender
Generator
Unterschied in der Authentizität zwischen Python und JavaScript
Vorsichtsmaßnahmen beim Beizen einer Funktion in Python
Express Python-Ertrag in JavaScript oder Java
Nehmen Sie die logische Summe von List in Python (Zip-Funktion)
Definieren Sie benutzerdefinierte Aktionen in JupyterHub (Hook-Funktion)
Scraping von Websites mit JavaScript in Python
Unterschied in der Ausgabe der Fensterfunktion mit gerader Länge