Maison  >  Article  >  développement back-end  >  Comment le rendement et le retour du générateur interagissent-ils en Python ?

Comment le rendement et le retour du générateur interagissent-ils en Python ?

Barbara Streisand
Barbara Streisandoriginal
2024-10-25 06:05:29904parcourir

How Do Generator Yield and Return Interact in Python?

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn