В Python итератор n
, полученный с использованием функции iter () , может быть использован один раз .
array = [1,2,3,4,5]
n = iter(array)
for x in n:
print(x)
# 1
# 2
# 3
# 4
# 5
Еслизатем вы вызываете next(n)
, вы получаете не вывод, а ошибку: StopIteration .Если вы попытаетесь повторить n снова, вы не получите никакого вывода (без ошибки, цикл for обрабатывает исключение).
Но вы можете перебрать массив:
for x in array:
print(x)
Если вы проверьте вывод кода, подобного вашему , вы получите:
n = iter([1,2,3,4,5])
for x in n:
print('odd_', x)
y = next(n)
print('even', y)
# odd_ 1
# even 2
# odd_ 3
# even 4
# odd_ 5
# StopIteration
Как указано @toniedzwiedz Object # to_enum является эквивалентом для Python iter()
так что вы можете вызвать Enumerator # next на нем.
В Ruby вы можете потреблять более одного раза перечислитель:
array = [1, 2, 3, 4, 5]
n = array.to_enum
# n = array.each # each returns an Enumerable
for x in n do
puts x
end
for x in n do
puts x
end
Так какВы можете потреблять более одного раза счетчик , вы получаете «двойной» вывод :
for x in n do
p x
p n.next
end
Или используя Array # каждый :
n.each do |x| # same as array.each.each
p x
p n.next
end
Также в Ruby вы достигаете конца сигнала итерации:
6.times do
p n.next
end
# `next': iteration reached an end (StopIteration)