mirror of
https://github.com/python/cpython.git
synced 2025-07-08 03:45:36 +00:00
44 lines
1 KiB
Python
44 lines
1 KiB
Python
def peek_and_iter(items):
|
|
if not items:
|
|
return None, None
|
|
items = iter(items)
|
|
try:
|
|
peeked = next(items)
|
|
except StopIteration:
|
|
return None, None
|
|
def chain():
|
|
yield peeked
|
|
yield from items
|
|
return chain(), peeked
|
|
|
|
|
|
def iter_many(items, onempty=None):
|
|
if not items:
|
|
if onempty is None:
|
|
return
|
|
if not callable(onempty):
|
|
raise onEmpty
|
|
items = onempty(items)
|
|
yield from iter_many(items, onempty=None)
|
|
return
|
|
items = iter(items)
|
|
try:
|
|
first = next(items)
|
|
except StopIteration:
|
|
if onempty is None:
|
|
return
|
|
if not callable(onempty):
|
|
raise onEmpty
|
|
items = onempty(items)
|
|
yield from iter_many(items, onempty=None)
|
|
else:
|
|
try:
|
|
second = next(items)
|
|
except StopIteration:
|
|
yield first, False
|
|
return
|
|
else:
|
|
yield first, True
|
|
yield second, True
|
|
for item in items:
|
|
yield item, True
|