Python: как вызвать позицию после перерыва из итерации по началу, остановке, пошаговому циклу
Я узнаю об итераторах и о том, как их использовать, и в процессе поставил вопрос. Можно ли вспомнить, где цикл прервался во время итерации (если цикл должен иметь условие разрыва, которое было выполнено), а затем забрать из вызванного места?
Пример того, что я говорю, у меня есть этот код:
print("Range() Test")
for i in range(10, 100, 10):
if i == 60:
print('Break Point')
break
print(i)
for i in range(10, 100, 10):
print(i)
Который должен работать и дать вам что-то вроде этого:
Range() Test
10
20
30
40
50
Break Point
10
20
30
40
50
60
70
80
90
Мой первый вопрос:
1) Есть ли способ вспомнить позицию, где произошел перерыв, и начать оттуда, в отличие от моего неуклюжего стартапа? Я видел случаи, когда итерация проходила над списком элементов, но я не смог найти пример / отработать пример использования iter() в нотации start/stop/step.
2) Проводя исследования (я изучаю Python и много занимаюсь самообучением), я видел дескриптор функции range() и как итератор, и НЕ как итератор, поэтому, если у кого-то есть более точная информация по этому вопросу, в отличие от чтобы я вырвал новый для использования в моем примере, это было бы очень ценно.
Спасибо!
2 ответа
По твоему первому вопросу... Я думаю, ты на правильном пути. iter()
сделает объект диапазона итератором. Он будет отслеживать себя, и вы можете выбрать, где вы были позже в вашем коде.
>>> x=iter(range(1,100,10))
>>> for i in x:
... if i >30:
... break
...
>>> for i in x:
... print(i)
...
41
51
61
71
81
91
2) объекты диапазона не являются итераторами. Это делает большую работу по объяснению
Это вообще плохой дизайн. Если вы хотите продолжить с того места, где остановились, почему вы вообще отказываетесь от безопасности своей петли? Вы включаете разрушительную деятельность в этот условный блок.
print("Range() Test")
for i in range(10, 100, 10):
if i == 60:
print('Break Point')
print(i)
В качестве альтернативы, сохраните столько состояния, сколько необходимо для перезапуска:
lower = 10
upper = 100
inc = 10
for i in range(lower, upper, inc):
if i == 60:
print('Break Point')
break
print(i)
old_i = i
for i in range(old_i, upper, inc):
print(i)
Выход:
Range() Test
10
20
30
40
50
Break Point
60
70
80
90
~