2 回答

TA貢獻(xiàn)1846條經(jīng)驗(yàn) 獲得超7個贊
有這個peek功能:
import itertools
def peek(iterable):
try:
first = next(iterable)
except StopIteration:
return None
return first, itertools.chain([first], iterable)
res = peek(gen())
if not res:
foo()
else:
for elem in res[1]:
bar(elem)
您仍然需要窺視生成器,但您可以做到干凈利落。

TA貢獻(xiàn)2065條經(jīng)驗(yàn) 獲得超14個贊
您無法直接判斷生成器是否為空。這是設(shè)計(jì)使然。生成器背后的一個關(guān)鍵原則是它們不會在內(nèi)存中保存生成序列的所有項(xiàng)目。
但是你可以做這樣的事情:
from itertools import chain
def check_first_and_iterate(iterable):
try:
first = next(iterable)
for item in chain([first], item):
bar(item)
except StopIteration:
foo()
check_first_and_iterate(iterable)
添加回答
舉報(bào)