260 votes

comment choisir un seul élément d'un générateur (en python)?

J'ai une fonction de générateur comme celle-ci:

 def myfunct():
  ...
  yield result
 

La manière habituelle d'appeler cette fonction serait:

 for r in myfunct():
  dostuff(r)
 

Ma question, est-il possible d'obtenir un seul élément du générateur quand je le souhaite? Par exemple, j'aimerais faire quelque chose comme:

 while True:
  ...
  if something:
      my_element = pick_just_one_element(myfunct())
      dostuff(my_element)
  ...
 

369voto

Sven Marnach Points 133943

Créer un générateur en utilisant

 g = myfunct()
 

Chaque fois que vous souhaitez un article, utilisez

 g.next()
 

ou

 next(g)
 

pour l'obtenir. Si le générateur est sorti, il lèvera StopIteration , attrapez donc cette exception si nécessaire.

2voto

g.d.d.c Points 20164

Je ne crois pas qu'il existe un moyen pratique de récupérer une valeur arbitraire à partir d'un générateur. Le générateur fournira une méthode next () pour se parcourir, mais la séquence complète n'est pas produite immédiatement pour économiser de la mémoire. C'est la différence fonctionnelle entre un générateur et une liste.

0voto

John Points 3990
 generator = myfunct()
while True:
   my_element = generator.next()
 

assurez-vous d'attraper l'exception levée après la prise du dernier élément

-3voto

keegan3d Points 2244

Je crois que le seul moyen est d’obtenir une liste de l’itérateur, puis d’obtenir l’élément souhaité à partir de cette liste.

 l = list(myfunct())
l[4]
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X