Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
allendowney
GitHub Repository: allendowney/cpython
Path: blob/main/Tools/c-analyzer/c_common/iterutil.py
12 views
1
def peek_and_iter(items):
2
if not items:
3
return None, None
4
items = iter(items)
5
try:
6
peeked = next(items)
7
except StopIteration:
8
return None, None
9
def chain():
10
yield peeked
11
yield from items
12
return chain(), peeked
13
14
15
def iter_many(items, onempty=None):
16
if not items:
17
if onempty is None:
18
return
19
if not callable(onempty):
20
raise onEmpty
21
items = onempty(items)
22
yield from iter_many(items, onempty=None)
23
return
24
items = iter(items)
25
try:
26
first = next(items)
27
except StopIteration:
28
if onempty is None:
29
return
30
if not callable(onempty):
31
raise onEmpty
32
items = onempty(items)
33
yield from iter_many(items, onempty=None)
34
else:
35
try:
36
second = next(items)
37
except StopIteration:
38
yield first, False
39
return
40
else:
41
yield first, True
42
yield second, True
43
for item in items:
44
yield item, True
45
46