Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Migrated to Confluence 4.0

Generator methods are defined by the use of the yield keyword:

Code Block
def fibonacci():
   a, b = 0, 1
   while true:
      yield b
      a, b = b, a+b

Given the definition above the following program would print the first five elements of the Fibonacci series:

Code Block
for index as int, element in zip(range(5), fibonacci()):
   print "$(index+1): $element"

So although the generator definition itself is unbounded (a while true loop) only the necessary elements will be computed, five in this particular case as the zip builtin will stop asking for more when the range is exausted.

Generator methods are also a great way of encapsulating iteration logic:

Code Block
def selectElements(element as XmlElement, tagName as string):
   for node as XmlNode in element.ChildNodes:
      if node isa XmlElement and tagName == node.Name:
         yield node