我正在学习迭代器以及如何使用它们,并且在此过程中提出了一个问题。是否可以回忆起循环在迭代过程中中断的位置(如果该循环要满足中断条件)然后从被召回的位置取回呢?
我说的一个例子是,我有以下代码:
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()的功能示例。
2)在研究中(我正在学习Python并进行很多自学),我已经看到range()函数描述器既是迭代器,也不是迭代器,因此,如果有人对此有更明确的信息,而不是像在我的示例中那样用新的方法撕毁我,那将不胜感激。
谢谢!
答案 0 :(得分:3)
第一个问题...我认为您的目标正确。 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)范围对象不是迭代器 This在解释方面做得很好
答案 1 :(得分:1)
这通常是错误的设计。如果您想从上次停下来的地方接机,为什么还要离开回路的安全性呢?您将冲动活动包括在该条件块中。
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
〜