Initial check-in
[dygraphs.git] / mochikit_v14 / doc / html / MochiKit / Iter.html
1 <?xml version="1.0" encoding="utf-8" ?>
2 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
3
4 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
5 <head>
6 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
7 <meta name="generator" content="Docutils 0.4: http://docutils.sourceforge.net/" />
8 <title>MochiKit.Iter - itertools for JavaScript; iteration made HARD, and then easy</title>
9
10 <link rel="stylesheet" href="../../../include/css/documentation.css" type="text/css" />
11 <script type="text/javascript" src="../../../packed/MochiKit/MochiKit.js"></script>
12 <script type="text/javascript" src="../../js/toc.js"></script>
13 </head>
14 <body>
15 <div class="document">
16 <div class="section">
17 <h1><a id="name" name="name">Name</a></h1>
18 <p>MochiKit.Iter - itertools for JavaScript; iteration made HARD, and
19 then easy</p>
20 </div>
21 <div class="section">
22 <h1><a id="synopsis" name="synopsis">Synopsis</a></h1>
23 <pre class="literal-block">
24 theSum = sum(takewhile(
25 partial(operator.gt, 10),
26 imap(
27 partial(operator.mul, 2),
28 count()
29 )
30 )
31 ));
32
33 assert( theSum == (0 + 0 + 2 + 4 + 6 + 8) );
34 </pre>
35 </div>
36 <div class="section">
37 <h1><a id="description" name="description">Description</a></h1>
38 <p>All of the functional programming missing from
39 <a class="mochiref reference" href="Base.html">MochiKit.Base</a> lives here. The functionality in this module
40 is largely inspired by Python's iteration protocol <a class="footnote-reference" href="#id4" id="id1" name="id1">[1]</a>, and the
41 itertools module <a class="footnote-reference" href="#id5" id="id2" name="id2">[2]</a>.</p>
42 <p>MochiKit.Iter defines a standard way to iterate over anything, that
43 you can extend with <a class="mochiref reference" href="#fn-registeriterator">registerIterator</a>, or by implementing
44 the <tt class="docutils literal"><span class="pre">.iter()</span></tt> or <tt class="docutils literal"><span class="pre">.__iterator__()</span></tt> (in MochiKit 1.4+) protocol.
45 Iterators are lazy, so it can potentially be
46 cheaper to build a filter chain of iterators than to build lots of
47 intermediate arrays. Especially when the data set is very large, but
48 the result is not.</p>
49 </div>
50 <div class="section">
51 <h1><a id="dependencies" name="dependencies">Dependencies</a></h1>
52 <ul class="simple">
53 <li><a class="mochiref reference" href="Base.html">MochiKit.Base</a></li>
54 </ul>
55 </div>
56 <div class="section">
57 <h1><a id="overview" name="overview">Overview</a></h1>
58 <div class="section">
59 <h2><a id="iteration-for-javascript" name="iteration-for-javascript">Iteration for JavaScript</a></h2>
60 <p>The best overview right now is in my Iteration for JavaScript <a class="footnote-reference" href="#id6" id="id3" name="id3">[3]</a>
61 blog entry. This information will migrate here eventually.</p>
62 </div>
63 </div>
64 <div class="section">
65 <h1><a id="api-reference" name="api-reference">API Reference</a></h1>
66 <div class="section">
67 <h2><a id="errors" name="errors">Errors</a></h2>
68 <p>
69 <a name="fn-stopiteration"></a>
70 <a class="mochidef reference" href="#fn-stopiteration">StopIteration</a>:</p>
71 <blockquote>
72 <p>The singleton <a class="mochiref reference" href="Base.html#fn-namederror">MochiKit.Base.NamedError</a> that signifies
73 the end of an iterator</p>
74 <dl class="docutils">
75 <dt><em>Availability</em>:</dt>
76 <dd>Available in MochiKit 1.3.1+</dd>
77 </dl>
78 </blockquote>
79 </div>
80 <div class="section">
81 <h2><a id="functions" name="functions">Functions</a></h2>
82 <p>
83 <a name="fn-applymap"></a>
84 <a class="mochidef reference" href="#fn-applymap">applymap(fun, seq[, self])</a>:</p>
85 <blockquote>
86 <p><tt class="docutils literal"><span class="pre">applymap(fun,</span> <span class="pre">seq)</span></tt> --&gt;
87 fun.apply(self, seq0), fun.apply(self, seq1), ...</p>
88 <dl class="docutils">
89 <dt><em>Availability</em>:</dt>
90 <dd>Available in MochiKit 1.3.1+</dd>
91 </dl>
92 </blockquote>
93 <p>
94 <a name="fn-chain"></a>
95 <a class="mochidef reference" href="#fn-chain">chain(p, q[, ...])</a>:</p>
96 <blockquote>
97 <p><tt class="docutils literal"><span class="pre">chain(p,</span> <span class="pre">q,</span> <span class="pre">...)</span></tt> --&gt; p0, p1, ... plast, q0, q1, ...</p>
98 <dl class="docutils">
99 <dt><em>Availability</em>:</dt>
100 <dd>Available in MochiKit 1.3.1+</dd>
101 </dl>
102 </blockquote>
103 <p>
104 <a name="fn-count"></a>
105 <a class="mochidef reference" href="#fn-count">count(n=0)</a>:</p>
106 <blockquote>
107 <p><tt class="docutils literal"><span class="pre">count(n=0)</span></tt> --&gt; n, n + 1, n + 2, ...</p>
108 <dl class="docutils">
109 <dt><em>Availability</em>:</dt>
110 <dd>Available in MochiKit 1.3.1+</dd>
111 </dl>
112 </blockquote>
113 <p>
114 <a name="fn-cycle"></a>
115 <a class="mochidef reference" href="#fn-cycle">cycle(p)</a>:</p>
116 <blockquote>
117 <p><tt class="docutils literal"><span class="pre">cycle(p)</span></tt> --&gt; p0, p1, ... plast, p0, p1, ...</p>
118 <dl class="docutils">
119 <dt><em>Availability</em>:</dt>
120 <dd>Available in MochiKit 1.3.1+</dd>
121 </dl>
122 </blockquote>
123 <p>
124 <a name="fn-dropwhile"></a>
125 <a class="mochidef reference" href="#fn-dropwhile">dropwhile(pred, seq)</a>:</p>
126 <blockquote>
127 <p><tt class="docutils literal"><span class="pre">dropwhile(pred,</span> <span class="pre">seq)</span></tt> --&gt; seq[n], seq[n + 1], starting when
128 pred(seq[n]) fails</p>
129 <dl class="docutils">
130 <dt><em>Availability</em>:</dt>
131 <dd>Available in MochiKit 1.3.1+</dd>
132 </dl>
133 </blockquote>
134 <p>
135 <a name="fn-every"></a>
136 <a class="mochidef reference" href="#fn-every">every(iterable, func)</a>:</p>
137 <blockquote>
138 <p>Return <tt class="docutils literal"><span class="pre">true</span></tt> if <tt class="docutils literal"><span class="pre">func(item)</span></tt> is <tt class="docutils literal"><span class="pre">true</span></tt> for every item in
139 <tt class="docutils literal"><span class="pre">iterable</span></tt>.</p>
140 <dl class="docutils">
141 <dt><em>Availability</em>:</dt>
142 <dd>Available in MochiKit 1.3.1+</dd>
143 </dl>
144 </blockquote>
145 <p>
146 <a name="fn-exhaust"></a>
147 <a class="mochidef reference" href="#fn-exhaust">exhaust(iterable)</a>:</p>
148 <blockquote>
149 <p>Exhausts an iterable without saving the results anywhere, like
150 <a class="mochiref reference" href="#fn-list">list(iterable)</a> when you don't care what the output is.</p>
151 <dl class="docutils">
152 <dt><em>Availability</em>:</dt>
153 <dd>Available in MochiKit 1.3.1+</dd>
154 </dl>
155 </blockquote>
156 <p>
157 <a name="fn-foreach"></a>
158 <a class="mochidef reference" href="#fn-foreach">forEach(iterable, func[, self])</a>:</p>
159 <blockquote>
160 <p>Call <tt class="docutils literal"><span class="pre">func</span></tt> for each item in <tt class="docutils literal"><span class="pre">iterable</span></tt>, and don't save the
161 results.</p>
162 <dl class="docutils">
163 <dt><em>Availability</em>:</dt>
164 <dd>Available in MochiKit 1.3.1+</dd>
165 </dl>
166 </blockquote>
167 <p>
168 <a name="fn-groupby"></a>
169 <a class="mochidef reference" href="#fn-groupby">groupby(iterable[, keyfunc])</a>:</p>
170 <blockquote>
171 <p>Make an iterator that returns consecutive keys and groups from the
172 iterable. The key is a function computing a key value for each
173 element. If not specified or is None, key defaults to an identity
174 function and returns the element unchanged. Generally, the
175 iterable needs to already be sorted on the same key function.</p>
176 <p>The returned group is itself an iterator that shares the
177 underlying iterable with <a class="mochiref reference" href="#fn-groupby">groupby()</a>. Because the source
178 is shared, when the groupby object is advanced, the previous group
179 is no longer visible. So, if that data is needed later, it should
180 be stored as an array:</p>
181 <pre class="literal-block">
182 var groups = [];
183 var uniquekeys = [];
184 forEach(groupby(data, keyfunc), function (key_group) {
185 groups.push(list(key_group[1]));
186 uniquekeys.push(key_group[0]);
187 });
188 </pre>
189 <p>As a convenience, <a class="mochiref reference" href="#fn-groupby_as_array">groupby_as_array()</a> is provided to
190 suit the above use case.</p>
191 <dl class="docutils">
192 <dt><em>Availability</em>:</dt>
193 <dd>Available in MochiKit 1.3.1+</dd>
194 </dl>
195 </blockquote>
196 <p>
197 <a name="fn-groupby_as_array"></a>
198 <a class="mochidef reference" href="#fn-groupby_as_array">groupby_as_array(iterable[, keyfunc])</a>:</p>
199 <blockquote>
200 <p>Perform the same task as <a class="mochiref reference" href="#fn-groupby">groupby()</a>, except return an
201 array of arrays instead of an iterator of iterators.</p>
202 <dl class="docutils">
203 <dt><em>Availability</em>:</dt>
204 <dd>Available in MochiKit 1.3.1+</dd>
205 </dl>
206 </blockquote>
207 <p>
208 <a name="fn-iextend"></a>
209 <a class="mochidef reference" href="#fn-iextend">iextend(lst, iterable)</a>:</p>
210 <blockquote>
211 <p>Just like <a class="mochiref reference" href="#fn-list">list(iterable)</a>, except it pushes results on
212 <tt class="docutils literal"><span class="pre">lst</span></tt> rather than creating a new one.</p>
213 <dl class="docutils">
214 <dt><em>Availability</em>:</dt>
215 <dd>Available in MochiKit 1.3.1+</dd>
216 </dl>
217 </blockquote>
218 <p>
219 <a name="fn-ifilter"></a>
220 <a class="mochidef reference" href="#fn-ifilter">ifilter(pred, seq)</a>:</p>
221 <blockquote>
222 <p><tt class="docutils literal"><span class="pre">ifilter(pred,</span> <span class="pre">seq)</span></tt> --&gt; elements of seq where <tt class="docutils literal"><span class="pre">pred(elem)</span></tt> is
223 <tt class="docutils literal"><span class="pre">true</span></tt></p>
224 <dl class="docutils">
225 <dt><em>Availability</em>:</dt>
226 <dd>Available in MochiKit 1.3.1+</dd>
227 </dl>
228 </blockquote>
229 <p>
230 <a name="fn-ifilterfalse"></a>
231 <a class="mochidef reference" href="#fn-ifilterfalse">ifilterfalse(pred, seq)</a>:</p>
232 <blockquote>
233 <p><tt class="docutils literal"><span class="pre">ifilterfalse(pred,</span> <span class="pre">seq)</span></tt> --&gt; elements of seq where
234 <tt class="docutils literal"><span class="pre">pred(elem)</span></tt> is <tt class="docutils literal"><span class="pre">false</span></tt></p>
235 <dl class="docutils">
236 <dt><em>Availability</em>:</dt>
237 <dd>Available in MochiKit 1.3.1+</dd>
238 </dl>
239 </blockquote>
240 <p>
241 <a name="fn-imap"></a>
242 <a class="mochidef reference" href="#fn-imap">imap(fun, p, q[, ...])</a>:</p>
243 <blockquote>
244 <p><tt class="docutils literal"><span class="pre">imap(fun,</span> <span class="pre">p,</span> <span class="pre">q,</span> <span class="pre">...)</span></tt> --&gt; fun(p0, q0, ...), fun(p1, q1, ...),
245 ...</p>
246 <dl class="docutils">
247 <dt><em>Availability</em>:</dt>
248 <dd>Available in MochiKit 1.3.1+</dd>
249 </dl>
250 </blockquote>
251 <p>
252 <a name="fn-islice"></a>
253 <a class="mochidef reference" href="#fn-islice">islice(seq, [start,] stop[, step])</a>:</p>
254 <blockquote>
255 <p><tt class="docutils literal"><span class="pre">islice(seq,</span> <span class="pre">[start,]</span> <span class="pre">stop[,</span> <span class="pre">step])</span></tt> --&gt; elements from
256 seq[start:stop:step] (in Python slice syntax)</p>
257 <dl class="docutils">
258 <dt><em>Availability</em>:</dt>
259 <dd>Available in MochiKit 1.3.1+</dd>
260 </dl>
261 </blockquote>
262 <p>
263 <a name="fn-iter"></a>
264 <a class="mochidef reference" href="#fn-iter">iter(iterable[, sentinel])</a>:</p>
265 <blockquote>
266 <p>Convert the given argument to an iterator (object implementing
267 <tt class="docutils literal"><span class="pre">.next()</span></tt>).</p>
268 <ol class="arabic simple">
269 <li>If <tt class="docutils literal"><span class="pre">iterable</span></tt> is an iterator (implements <tt class="docutils literal"><span class="pre">.next()</span></tt>), then
270 it will be returned as-is.</li>
271 <li>If <tt class="docutils literal"><span class="pre">iterable</span></tt> is an iterator factory (implements
272 <tt class="docutils literal"><span class="pre">.iter()</span></tt>), then the result of <tt class="docutils literal"><span class="pre">iterable.iter()</span></tt> will be
273 returned.</li>
274 <li>If <tt class="docutils literal"><span class="pre">iterable</span></tt> is a JavaScript 1.7 iterator factory (implements
275 <tt class="docutils literal"><span class="pre">.__iterable__()</span></tt>), then the result of <tt class="docutils literal"><span class="pre">iterable.__iterable__()</span></tt>
276 will be returned (MochiKit 1.4+).</li>
277 <li>Otherwise, the iterator factory
278 <a class="mochiref reference" href="Base.html#fn-adapterregistry">MochiKit.Base.AdapterRegistry</a> is used to find a
279 match.</li>
280 <li>If no factory is found, it will throw <tt class="docutils literal"><span class="pre">TypeError</span></tt></li>
281 </ol>
282 <p>Built-in iterator factories are present for Array-like objects,
283 and objects that implement the <tt class="docutils literal"><span class="pre">iterateNext</span></tt> protocol (e.g. the
284 result of Mozilla's <tt class="docutils literal"><span class="pre">document.evaluate</span></tt>).</p>
285 <p>When used directly, using an iterator should look like this:</p>
286 <pre class="literal-block">
287 var it = iter(iterable);
288 try {
289 while (var o = it.next()) {
290 // use o
291 }
292 } catch (e) {
293 if (e != StopIteration) {
294 throw e;
295 }
296 // pass
297 }
298 </pre>
299 <p>This is ugly, so you should use the higher order functions to work
300 with iterators whenever possible.</p>
301 <dl class="docutils">
302 <dt><em>Availability</em>:</dt>
303 <dd>Available in MochiKit 1.3.1+</dd>
304 </dl>
305 </blockquote>
306 <p>
307 <a name="fn-izip"></a>
308 <a class="mochidef reference" href="#fn-izip">izip(p, q[, ...])</a>:</p>
309 <blockquote>
310 <p><tt class="docutils literal"><span class="pre">izip(p,</span> <span class="pre">q,</span> <span class="pre">...)</span></tt> --&gt; [p0, q0, ...], [p1, q1, ...], ...</p>
311 <dl class="docutils">
312 <dt><em>Availability</em>:</dt>
313 <dd>Available in MochiKit 1.3.1+</dd>
314 </dl>
315 </blockquote>
316 <p>
317 <a name="fn-list"></a>
318 <a class="mochidef reference" href="#fn-list">list(iterable)</a>:</p>
319 <blockquote>
320 <p>Convert <tt class="docutils literal"><span class="pre">iterable</span></tt> to a new <tt class="docutils literal"><span class="pre">Array</span></tt></p>
321 <dl class="docutils">
322 <dt><em>Availability</em>:</dt>
323 <dd>Available in MochiKit 1.3.1+</dd>
324 </dl>
325 </blockquote>
326 <p>
327 <a name="fn-next"></a>
328 <a class="mochidef reference" href="#fn-next">next(iterator)</a>:</p>
329 <blockquote>
330 <p>Return <tt class="docutils literal"><span class="pre">iterator.next()</span></tt></p>
331 <dl class="docutils">
332 <dt><em>Availability</em>:</dt>
333 <dd>Available in MochiKit 1.3.1+</dd>
334 </dl>
335 </blockquote>
336 <p>
337 <a name="fn-range"></a>
338 <a class="mochidef reference" href="#fn-range">range([start,] stop[, step])</a>:</p>
339 <blockquote>
340 <p>Return an iterator containing an arithmetic progression of integers.</p>
341 <p><tt class="docutils literal"><span class="pre">range(i,</span> <span class="pre">j)</span></tt> returns <a class="mochiref reference" href="#fn-iter">iter([i, i + 1, i + 2, ..., j -
342 1])</a></p>
343 <p><tt class="docutils literal"><span class="pre">start</span></tt> (!) defaults to <tt class="docutils literal"><span class="pre">0</span></tt>. When <tt class="docutils literal"><span class="pre">step</span></tt> is given, it
344 specifies the increment (or decrement). The end point is omitted!</p>
345 <p>For example, <tt class="docutils literal"><span class="pre">range(4)</span></tt> returns <a class="mochiref reference" href="#fn-iter">iter([0, 1, 2, 3])</a>.
346 This iterates over exactly the valid indexes for an array of 4
347 elements.</p>
348 <dl class="docutils">
349 <dt><em>Availability</em>:</dt>
350 <dd>Available in MochiKit 1.3.1+</dd>
351 </dl>
352 </blockquote>
353 <p>
354 <a name="fn-reduce"></a>
355 <a class="mochidef reference" href="#fn-reduce">reduce(fn, iterable[, initial])</a>:</p>
356 <blockquote>
357 <p>Apply <tt class="docutils literal"><span class="pre">fn(a,</span> <span class="pre">b)</span></tt> cumulatively to the items of an iterable from
358 left to right, so as to reduce the iterable to a single value.</p>
359 <p>For example:</p>
360 <pre class="literal-block">
361 reduce(function (a, b) { return x + y; }, [1, 2, 3, 4, 5])
362 </pre>
363 <p>calculates:</p>
364 <pre class="literal-block">
365 ((((1 + 2) + 3) + 4) + 5).
366 </pre>
367 <p>If initial is given, it is placed before the items of the sequence
368 in the calculation, and serves as a default when the sequence is
369 empty.</p>
370 <p>Note that the above example could be written more clearly as:</p>
371 <pre class="literal-block">
372 reduce(operator.add, [1, 2, 3, 4, 5])
373 </pre>
374 <p>Or even simpler:</p>
375 <pre class="literal-block">
376 sum([1, 2, 3, 4, 5])
377 </pre>
378 <dl class="docutils">
379 <dt><em>Availability</em>:</dt>
380 <dd>Available in MochiKit 1.3.1+</dd>
381 </dl>
382 </blockquote>
383 <p>
384 <a name="fn-registeriteratorfactory"></a>
385 <a class="mochidef reference" href="#fn-registeriteratorfactory">registerIteratorFactory(name, check, iterfactory[, override])</a>:</p>
386 <blockquote>
387 <p>Register an iterator factory for use with the iter function.</p>
388 <p><tt class="docutils literal"><span class="pre">check</span></tt> is a <tt class="docutils literal"><span class="pre">function(a)</span></tt> that returns <tt class="docutils literal"><span class="pre">true</span></tt> if <tt class="docutils literal"><span class="pre">a</span></tt> can
389 be converted into an iterator with <tt class="docutils literal"><span class="pre">iterfactory</span></tt>.</p>
390 <p><tt class="docutils literal"><span class="pre">iterfactory</span></tt> is a <tt class="docutils literal"><span class="pre">function(a)</span></tt> that returns an object with a
391 <tt class="docutils literal"><span class="pre">.next()</span></tt> method that returns the next value in the sequence.</p>
392 <p><tt class="docutils literal"><span class="pre">iterfactory</span></tt> is guaranteed to only be called if <tt class="docutils literal"><span class="pre">check(a)</span></tt>
393 returns a true value.</p>
394 <p>If <tt class="docutils literal"><span class="pre">override</span></tt> is <tt class="docutils literal"><span class="pre">true</span></tt>, then it will be made the
395 highest precedence iterator factory. Otherwise, the lowest.</p>
396 <dl class="docutils">
397 <dt><em>Availability</em>:</dt>
398 <dd>Available in MochiKit 1.3.1+</dd>
399 </dl>
400 </blockquote>
401 <p>
402 <a name="fn-repeat"></a>
403 <a class="mochidef reference" href="#fn-repeat">repeat(elem[, n])</a>:</p>
404 <blockquote>
405 <p><tt class="docutils literal"><span class="pre">repeat(elem,</span> <span class="pre">[,n])</span></tt> --&gt; elem, elem, elem, ... endlessly or up
406 to n times</p>
407 <dl class="docutils">
408 <dt><em>Availability</em>:</dt>
409 <dd>Available in MochiKit 1.3.1+</dd>
410 </dl>
411 </blockquote>
412 <p>
413 <a name="fn-reversed"></a>
414 <a class="mochidef reference" href="#fn-reversed">reversed(iterable)</a>:</p>
415 <blockquote>
416 <p>Return a reversed array from iterable.</p>
417 <dl class="docutils">
418 <dt><em>Availability</em>:</dt>
419 <dd>Available in MochiKit 1.3.1+</dd>
420 </dl>
421 </blockquote>
422 <p>
423 <a name="fn-some"></a>
424 <a class="mochidef reference" href="#fn-some">some(iterable, func)</a>:</p>
425 <blockquote>
426 <p>Return <tt class="docutils literal"><span class="pre">true</span></tt> if <tt class="docutils literal"><span class="pre">func(item)</span></tt> is <tt class="docutils literal"><span class="pre">true</span></tt> for at least one
427 item in <tt class="docutils literal"><span class="pre">iterable</span></tt>.</p>
428 <dl class="docutils">
429 <dt><em>Availability</em>:</dt>
430 <dd>Available in MochiKit 1.3.1+</dd>
431 </dl>
432 </blockquote>
433 <p>
434 <a name="fn-sorted"></a>
435 <a class="mochidef reference" href="#fn-sorted">sorted(iterable[, cmp])</a>:</p>
436 <blockquote>
437 <p>Return a sorted array from iterable.</p>
438 <dl class="docutils">
439 <dt><em>Availability</em>:</dt>
440 <dd>Available in MochiKit 1.3.1+</dd>
441 </dl>
442 </blockquote>
443 <p>
444 <a name="fn-sum"></a>
445 <a class="mochidef reference" href="#fn-sum">sum(iterable, start=0)</a>:</p>
446 <blockquote>
447 <p>Returns the sum of a sequence of numbers plus the value of
448 parameter <tt class="docutils literal"><span class="pre">start</span></tt> (with a default of 0). When the sequence is
449 empty, returns start.</p>
450 <p>Equivalent to:</p>
451 <pre class="literal-block">
452 reduce(operator.add, iterable, start);
453 </pre>
454 <dl class="docutils">
455 <dt><em>Availability</em>:</dt>
456 <dd>Available in MochiKit 1.3.1+</dd>
457 </dl>
458 </blockquote>
459 <p>
460 <a name="fn-takewhile"></a>
461 <a class="mochidef reference" href="#fn-takewhile">takewhile(pred, seq)</a>:</p>
462 <blockquote>
463 <p><tt class="docutils literal"><span class="pre">takewhile(pred,</span> <span class="pre">seq)</span></tt> --&gt; seq[0], seq[1], ... until
464 pred(seq[n]) fails</p>
465 <dl class="docutils">
466 <dt><em>Availability</em>:</dt>
467 <dd>Available in MochiKit 1.3.1+</dd>
468 </dl>
469 </blockquote>
470 <p>
471 <a name="fn-tee"></a>
472 <a class="mochidef reference" href="#fn-tee">tee(iterable, n=2)</a>:</p>
473 <blockquote>
474 <p><tt class="docutils literal"><span class="pre">tee(it,</span> <span class="pre">n=2)</span></tt> --&gt; [it1, it2, it3, ... itn] splits one iterator
475 into n</p>
476 <dl class="docutils">
477 <dt><em>Availability</em>:</dt>
478 <dd>Available in MochiKit 1.3.1+</dd>
479 </dl>
480 </blockquote>
481 </div>
482 </div>
483 <div class="section">
484 <h1><a id="see-also" name="see-also">See Also</a></h1>
485 <table class="docutils footnote" frame="void" id="id4" rules="none">
486 <colgroup><col class="label" /><col /></colgroup>
487 <tbody valign="top">
488 <tr><td class="label"><a class="fn-backref" href="#id1" name="id4">[1]</a></td><td>The iteration protocol is described in
489 PEP 234 - Iterators: <a class="reference" href="http://www.python.org/peps/pep-0234.html">http://www.python.org/peps/pep-0234.html</a></td></tr>
490 </tbody>
491 </table>
492 <table class="docutils footnote" frame="void" id="id5" rules="none">
493 <colgroup><col class="label" /><col /></colgroup>
494 <tbody valign="top">
495 <tr><td class="label"><a class="fn-backref" href="#id2" name="id5">[2]</a></td><td>Python's itertools
496 module: <a class="reference" href="http://docs.python.org/lib/module-itertools.html">http://docs.python.org/lib/module-itertools.html</a></td></tr>
497 </tbody>
498 </table>
499 <table class="docutils footnote" frame="void" id="id6" rules="none">
500 <colgroup><col class="label" /><col /></colgroup>
501 <tbody valign="top">
502 <tr><td class="label"><a class="fn-backref" href="#id3" name="id6">[3]</a></td><td>Iteration in JavaScript: <a class="reference" href="http://bob.pythonmac.org/archives/2005/07/06/iteration-in-javascript/">http://bob.pythonmac.org/archives/2005/07/06/iteration-in-javascript/</a></td></tr>
503 </tbody>
504 </table>
505 </div>
506 <div class="section">
507 <h1><a id="authors" name="authors">Authors</a></h1>
508 <ul class="simple">
509 <li>Bob Ippolito &lt;<a class="reference" href="mailto:bob&#64;redivi.com">bob&#64;redivi.com</a>&gt;</li>
510 </ul>
511 </div>
512 <div class="section">
513 <h1><a id="copyright" name="copyright">Copyright</a></h1>
514 <p>Copyright 2005 Bob Ippolito &lt;<a class="reference" href="mailto:bob&#64;redivi.com">bob&#64;redivi.com</a>&gt;. This program is
515 dual-licensed free software; you can redistribute it and/or modify it
516 under the terms of the <a class="reference" href="http://www.opensource.org/licenses/mit-license.php">MIT License</a> or the <a class="reference" href="http://www.opensource.org/licenses/afl-2.1.php">Academic Free License
517 v2.1</a>.</p>
518 </div>
519 </div>
520
521 </body>
522 </html>