Weiterentwicklung der Python-Generatorfunktion bis kurz vor die erste Ausbeute [duplizieren]

8

Wenn Sie eine Generatorfunktion instanziieren, wird kein Code ausgeführt, bis Sie next darauf aufrufen.

Dies bedeutet, dass wenn die Generatorfunktion irgendeinen Initialisierungscode enthält, dieser erst ausgeführt wird, wenn er iteriert wurde.

Betrachten Sie dieses Beispiel:

%Vor%

Wenn die Datei nicht existiert, wird die Ausnahme bei der for-Schleife ausgelöst. Ich würde Wie der Code vor dem ersten yield , der ausgeführt wird, bevor der Generator iteriert wird, werden alle Ausnahmen während der Initialisierung ausgelöst bei der Instantiierung des Generators.

Gibt es einen sauberen pythonischen Weg?

    
WGH 19.04.2016, 18:19
quelle

2 Antworten

5

Wickeln Sie eine reguläre Funktion um den Generator und legen Sie die Initialisierung dort:

%Vor%

(In diesem Fall könnten Sie den inneren Generator durch itertools.repeat ersetzen, aber nicht generell.)

    
user2357112 19.04.2016 18:23
quelle
3

Die Funktionswrapper-Lösung funktioniert einwandfrei. Wenn Sie den gesamten Code in derselben Funktion behalten möchten, können Sie eine Schließung erstellen.

%Vor%     
Jared Goguen 19.04.2016 18:38
quelle

Tags und Links