Python: Ausbeute Dict-Elemente in den Generatoren?

Bevor ich ein Wort sagen, ich danke der community für Ihre die maßgebliche Ort für meine Programmierung Abfragen, wie der jüngste. Und so tun diese Komplimente waren nicht ausgedrückt mit Worten. Jedenfalls, dem Gesetz der Wahrscheinlichkeit diktiert, dass ich stolpere über etwas, was ich nicht finden konnte, mit dem vielseitigen Suchleiste, also habe ich beschlossen, ausdrücklich bitten, für die erste Zeit. Vielleicht, ich war nicht gerade Suche mit Hilfe der Pythonic-genug lingo. Oder vielleicht bin ich zu saugen Googeln/Stackoverflowing. Unabhängig davon,...

Ich bin liebäugelt mit Python Coroutinen und Generatoren. Von dem, was ich sammeln können, Sie alles tun können, was eine generator-comprehension können mit Produzent Coroutinen, wenn auch eher wortreich. Ich bin derzeit mit Python 3, obwohl alle Antworten in Bezug auf Python 2 als auch gehen würde nicht eine zu verpassen.

Also ich ' m vorausgesetzt, die folgenden Codefragmente sind äquivalent:

one_to_three = (num for num in range(1, 4))

...

def one_to_three():
    for num in range(1, 4):
        yield num

one_to_three_gen = one_to_three()

Funktioniert es auf meiner Python-installation. Wenn ich das ignorieren der Redundanz-so-gemeinsam-in-Beispiele vorgestellt, die in diesem code sehe ich, dass der generator comprehension Karten leicht an den generator durch den Hersteller coroutine. Als Dr. Pragmatisch, ich habe versucht, das mapping, das gleiche Konzept zu dicts, gegeben, dass dict-Verstehens bereits vorhanden ist, mit mir zu denken, diese beiden gleichwertig:

one_to_three_doubles = {num : num * 2 for num in range(1, 4)}

...

def one_to_three_doubles():
    for num in range(1, 4):
        yield num : num * 2

one_to_three_doubles_gen = one_to_three_doubles()

Die erste funktioniert aber das zweite nicht. Es kennzeichnet einen syntax-Fehler, die auf den Doppelpunkt auf der 3. Zeile.

Nun, entweder bin ich zu Verrutschen sehr leicht auf die syntax, oder habe ich ein massives Missverständnis, wie Produzent Coroutinen Arbeit. Ich vermute, dass es andernfalls aus dem gleichen Grund können Sie nicht machen eine coroutine Rückgabe einer Liste im Gegensatz zu einem generator, aber ich weiß es nicht wirklich.

Also ja, ein Update, der Fehler ist im Grunde das, was ich verlange; vielen Dank im Voraus. Ich würde lieber eine Antwort, die mir sagt, die Antwort im Gegensatz zu mir eine ganz neue Art und Weise erreichen, mit dem Ergebnis, aber natürlich, wenn es der einzige Weg...

  • Sie sprechen über Generatoren, nicht Coroutinen. Wenn Sie wissen wollen, dass Coroutinen wirklich sind, Lesen Sie Eine Kuriose Natürlich auf Coroutinen und Parallelität.
  • Ich dachte, dass es die beiden Produzenten und Konsumenten, Coroutinen, und dass die Verwendung der Muster nachzugeben, um eine Abfolge zu erstellen, wurde eine vereinfachende Verwendung von Coroutinen zu erstellen, generator-Ausdrücke, gegeben, dass die Ausführung unterbrochen und Lebensläufe in der das nachgeben der einzelnen Werte ist, wie es Strecken, wo es ist? Könnte falsch sein, aber.
InformationsquelleAutor Louis | 2011-07-16
Schreibe einen Kommentar