]> granicus.if.org Git - python/commitdiff
Add an example application to the docs.
authorRaymond Hettinger <python@rcn.com>
Fri, 30 Apr 2004 22:52:50 +0000 (22:52 +0000)
committerRaymond Hettinger <python@rcn.com>
Fri, 30 Apr 2004 22:52:50 +0000 (22:52 +0000)
Doc/lib/libcollections.tex

index 14e3bf54d104bec0c94141f44c064de9b2652ad9..c4ba84ca99928ef7123f4a0e01d1ebe781f2e1e6 100644 (file)
@@ -67,7 +67,7 @@ Deque objects support the following methods:
 \begin{methoddesc}{rotate}{n}
    Rotate the deque \var{n} steps to the right.  If \var{n} is
    negative, rotate to the left.  Rotating one step to the right
-   is equivalent to:  \samp{d.appendleft(d.pop())}.
+   is equivalent to:  \samp{d.appendleft(d.pop())}. 
 \end{methoddesc}
 
 In addition to the above, deques support iteration, pickling, \samp{len(d)},
@@ -128,5 +128,34 @@ IndexError: pop from an empty deque
 >>> d.extendleft('abc')              # extendleft() reverses the input order
 >>> d
 deque(['c', 'b', 'a'])
+\end{verbatim}
 
-\end{verbatim}    
+
+A roundrobin task server can be built from a \class{deque} using
+\method{popleft()} to select the current task and \method{append()}
+to add it back to the tasklist if the input stream is not exhausted:
+
+\begin{verbatim}
+def roundrobin(*iterables):
+    pending = deque(iter(i) for i in iterables)
+    while pending:
+        task = pending.popleft()
+        try:
+            yield task.next()
+        except StopIteration:
+            continue
+        pending.append(task)
+
+>>> for value in roundrobin('abc', 'd', 'efgh'):
+        print value
+
+a
+d
+e
+b
+f
+c
+g
+h
+
+\end{verbatim}