Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(36)

Side by Side Diff: third_party/google-endpoints/future/builtins/newnext.py

Issue 2666783008: Add google-endpoints to third_party/. (Closed)
Patch Set: Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 '''
2 This module provides a newnext() function in Python 2 that mimics the
3 behaviour of ``next()`` in Python 3, falling back to Python 2's behaviour for
4 compatibility if this fails.
5
6 ``newnext(iterator)`` calls the iterator's ``__next__()`` method if it exists. I f this
7 doesn't exist, it falls back to calling a ``next()`` method.
8
9 For example:
10
11 >>> class Odds(object):
12 ... def __init__(self, start=1):
13 ... self.value = start - 2
14 ... def __next__(self): # note the Py3 interface
15 ... self.value += 2
16 ... return self.value
17 ... def __iter__(self):
18 ... return self
19 ...
20 >>> iterator = Odds()
21 >>> next(iterator)
22 1
23 >>> next(iterator)
24 3
25
26 If you are defining your own custom iterator class as above, it is preferable
27 to explicitly decorate the class with the @implements_iterator decorator from
28 ``future.utils`` as follows:
29
30 >>> @implements_iterator
31 ... class Odds(object):
32 ... # etc
33 ... pass
34
35 This next() function is primarily for consuming iterators defined in Python 3
36 code elsewhere that we would like to run on Python 2 or 3.
37 '''
38
39 _builtin_next = next
40
41 _SENTINEL = object()
42
43 def newnext(iterator, default=_SENTINEL):
44 """
45 next(iterator[, default])
46
47 Return the next item from the iterator. If default is given and the iterator
48 is exhausted, it is returned instead of raising StopIteration.
49 """
50
51 # args = []
52 # if default is not _SENTINEL:
53 # args.append(default)
54 try:
55 try:
56 return iterator.__next__()
57 except AttributeError:
58 try:
59 return iterator.next()
60 except AttributeError:
61 raise TypeError("'{0}' object is not an iterator".format(
62 iterator.__class__.__name__))
63 except StopIteration as e:
64 if default is _SENTINEL:
65 raise e
66 else:
67 return default
68
69
70 __all__ = ['newnext']
71
OLDNEW
« no previous file with comments | « third_party/google-endpoints/future/builtins/misc.py ('k') | third_party/google-endpoints/future/builtins/newround.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698