Appeler une fonction génératrice n'exécute aucune ligne de son corps ; cela renvoie un objet générateur. Le corps ne s'exécute que lorsque vous appelez next dessus, jusqu'au premier yield, qui suspend la frame avec ses variables locales intactes. Chaque next suivant reprend exactement là où il s'était arrêté. Quand le corps se termine, le générateur lève StopIteration, qu'une boucle for attrape pour vous.
Pourquoi les recruteurs posent cette question
Cela teste si vous comprenez l'exécution suspendue, qui est le modèle mental derrière les itérateurs, les gestionnaires de contexte écrits avec contextlib et les coroutines asynchrones. Un recruteur voit en deux phrases si vous avez seulement utilisé des générateurs ou si vous savez que la frame est préservée entre les yield. Cela prépare aussi les relances sur le protocole d'itération et sur send et throw.
Comment structurer votre réponse
- Dites que l'appel renvoie un objet et n'exécute rien.
- Décrivez le cycle suspension/reprise autour de yield.
- Expliquez comment la boucle voit la fin.
- Reliez cela au protocole d'itération.
Exemple de réponse
L'appel ne fait presque rien. Python voit le mot-clé yield à la compilation, marque la fonction comme génératrice, et l'appel se contente de rendre un objet générateur avec une frame gelée. Rien dans le corps n'a encore tourné, ce qui surprend les gens quand ils s'attendent à ce que leur validation en tête de fonction se déclenche tout de suite. Le premier next s'exécute jusqu'à tomber sur un yield, fait sortir cette valeur, et gèle la frame avec toutes les locales encore vivantes. Rappelez next et l'exécution reprend à la ligne qui suit le yield. Quand la fonction arrive au bout ou tombe sur un return nu, Python lève StopIteration, et une boucle for y voit le signal d'arrêt. Sous le capot un générateur satisfait le protocole d'itération parce qu'il a à la fois dunder iter et dunder next, donc il fonctionne partout où un itérable est attendu. Je m'appuie là-dessus pour les pipelines de streaming. Sur un projet nous avions quatre étapes de transformation chaînées en générateurs, et aucune étape n'a jamais gardé plus d'un enregistrement.
Vous passez cet entretien bientôt ? GhostPilot écoute votre appel en direct, repère la question dès qu'elle est posée et affiche une réponse structurée à l'écran en temps réel. Essayez-le lors de votre prochain entretien blanc, ou prenez un Session Pass à $29, sans abonnement, pour le jour J.
Voir comment ça marcheQuestions de relance à prévoir
- Que vous apporte yield from ?
- Comment fonctionnent send et throw sur un générateur ?
- En quoi un générateur asynchrone est-il différent ?
Autres questions pour Développeur Python
Votre recruteur posera sa propre version de celle-ci. Collez votre véritable fiche de poste dans le Question Predictor gratuit et obtenez les 20 questions que ce poste a le plus de chances de poser, avec ce que chacune cherche vraiment à sonder.
Prédire mes questions