Rendement du générateur et interaction de retour en Python
Avant Python 3.3, combiner le rendement et le rendement dans une définition de fonction entraînait une erreur. Cependant, dans Python 3.3 et versions ultérieures, ce comportement a été mis à jour.
Comportement de Python 3.3
Dans Python 3.3, l'instruction return dans une fonction génératrice est désormais traitée de la même manière. à une instruction raise StopIteration(). Par conséquent, utiliser à la fois return et rendement dans un générateur équivaut désormais à lever une exception StopIteration avec la valeur spécifiée.
Exemple :
Considérez le code suivant :
<code class="python">def f(): return 3 yield 2</code>
Lorsque la fonction f() est appelée, elle ne générera plus d'erreur d'exécution. Au lieu de cela, la fonction __next__() de l'objet générateur (x) déclenchera une exception StopIteration avec la valeur 3 :
<code class="python">x = f() try: print(x.__next__()) except StopIteration as e: print(e.value) # Prints "3"</code>
Céder la valeur renvoyée
Si une fonction génératrice est déléguée en utilisant la syntaxe rendement from, la valeur renvoyée de l'instruction return sera le résultat du générateur délégué.
Exemple :
<code class="python">def f(): return 1 yield 2 def g(): x = yield from f() print(x) # Iterate through the generator: for _ in g(): pass # Prints "1"</code>
Dans cet exemple, le générateur f() est délégué au générateur g() en utilisant le rendement de. En conséquence, la valeur renvoyée par return 1 dans le générateur f() devient le résultat du générateur g().
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!