Maison  >  Article  >  développement back-end  >  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
Mary-Kate Olsenoriginal
2024-10-25 03:16:02410parcourir

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>

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>

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:
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