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

Python: How to recall position after break from iteration over start, stop, step loop

我正在学习迭代器以及如何使用它们,并且在这个过程中提出了一个问题。是否有可能回忆起循环在迭代期间停止的地方(如果循环有一个满足的中断条件)然后从回忆的地方开始?

我所说的一个例子是,我有这段代码:

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) 有没有办法回忆起中断发生的位置并从那里开始,而不是我笨手笨脚的重新开始?我已经看到迭代在项目列表上的实例,但无法找到 example/work 一个在 start/stop/step 符号上使用 iter() 的功能示例。

2) 在做研究时(我正在学习 Python 并做了很多自学)我已经看到 range() 函数描述器既是迭代器又不是迭代器所以,如果有人对此有更多明确的信息,而不是为了在我的示例中使用它而撕毁我一个新的信息,将不胜感激。

谢谢!

这通常是糟糕的设计。如果您想从中断的地方继续,为什么要完全离开循环的安全性呢?您在该条件块中包含了干扰性 activity。

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

~

关于你的第一个问题...我认为你是在正确的轨道上。 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 解释得很好