Maison > développement back-end > Tutoriel Python > Comment fonctionnent le retour et le rendement dans les générateurs Python ?

Comment fonctionnent le retour et le rendement dans les générateurs Python ?

Mary-Kate Olsen
Libérer: 2024-10-25 03:16:02
original
602 Les gens l'ont consulté

How Do Return and Yield Work in Python Generators?

Return et Yield dans les générateurs Python

Dans Python antérieur à la version 3.3, l'utilisation simultanée des instructions return et rendement dans une définition de fonction de générateur serait entraîner une erreur. Cependant, ce comportement a changé dans Python 3.3.

Considérez le code suivant :

<code class="python">def f():
  return 3
  yield 2</code>
Copier après la connexion

L'appel de x = f() créera un générateur et x.__next__() déclenchera un Exception StopItération. Ce comportement diffère du simple retour 3, qui aurait renvoyé la valeur 3.

En effet, dans Python 3.3, return au sein d'un générateur équivaut désormais à raise StopIteration(). Par conséquent, l'exception StopIteration contient la valeur 3 dans l'extrait de code ci-dessus. L'accès à l'attribut value de l'exception récupérera cette valeur.

De plus, le rendement de permet de déléguer les générateurs à d'autres générateurs. Considérons l'exemple suivant :

<code class="python">def f():
    return 1
    yield 2

def g():
    x = yield from f()
    print(x)

for _ in g():
    pass</code>
Copier après la connexion

Ce code imprime 1. g délègue l'exécution à f, et la valeur renvoyée par f (c'est-à-dire 1) est affectée à x. Cependant, l'instruction rendement 2 dans f n'est pas exécutée puisque l'exécution a été déléguée à 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 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