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

Barbara Streisand
Libérer: 2024-10-25 06:05:29
original
991 Les gens l'ont consulté

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>
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion

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!

source:php
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal