iter
, как ожидается, не будет иметь побочных эффектов.Нарушая это предположение, ваш код нарушает все виды вещей.Например, стандартный тест на предмет повторяемости вещи:
try:
iter(thing)
except TypeError:
do_whatever()
сбросит ваш файл.Точно так же рецепт itertools consume
:
def consume(iterator, n=None):
"Advance the iterator n-steps ahead. If n is None, consume entirely."
# Use functions that consume iterators at C speed.
if n is None:
# feed the entire iterator into a zero-length deque
collections.deque(iterator, maxlen=0)
else:
# advance to the empty slice starting at position n
next(islice(iterator, n, n), None)
создаст неправильную позицию файла вместо продвижения n
записей после consume(your_file, n)
.Пропуск первых нескольких записей с помощью next
до того, как цикл также потерпит неудачу:
f = MySpecialFile(whatever)
next(f) # Skip a header, or try, anyway.
for record in f:
# We get the header anyway.
uhoh()