Python:如何从迭代开始,停止,步进循环中断后重新调用位置

时间:2018-08-22 20:21:53

标签: python python-3.x iterator listiterator

我正在学习迭代器以及如何使用它们,并且在此过程中提出了一个问题。是否可以回忆起循环在迭代过程中中断的位置(如果该循环要满足中断条件)然后从被召回的位置取回呢?

我说的一个例子是,我有以下代码:

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()函数描述器既是迭代器,也不是迭代器,因此,如果有人对此有更明确的信息,而不是像在我的示例中那样用新的方法撕毁我,那将不胜感激。

谢谢!

2 个答案:

答案 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