Friday, September 3, 2010

Internal Iterators in Python

In my post I started a brief discussion on internal interators and external iterators.
Here I showed how a couple of external iterators can be implemented in Python using generators.

Now I will present a couple of internal iterators in Python performing the same tasks. The user only has to provide the callback.

def dfs(node, action):
    stack = [node, ]
    while stack:
        current_node = stack.pop()
        stack.extend(reversed(current_node.children))
        action(current_node.value)

def bfs(node, action):
    queue = collections.deque((node, ))
    while queue:
        current_node = queue.popleft()
        queue.extend(current_node.children)
        action(current_node.value)


dfs(tree, lambda x: sys.stdout.write("%s, " % x))

The code comes from the presentation I gave at Pycon Italia 4.

No comments: