Search code examples
pythoniteratorgeneratorpython-2.x

How to pick just one item from a generator?


I have a generator function like the following:

def myfunct():
  ...
  yield result

The usual way to call this function would be:

for r in myfunct():
  dostuff(r)

My question, is there a way to get just one element from the generator whenever I like? For example, I'd like to do something like:

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

Solution

  • Create a generator using

    g = myfunct()
    

    Everytime you would like an item, use

    next(g)
    

    (or g.next() in Python 2.5 or below).

    If the generator exits, it will raise StopIteration. You can either catch this exception if necessary, or use the default argument to next():

    next(g, default_value)