我有以下循环重新分配给迭代器变量:
currentPrime = None
sieve = iter(range(2, 10))
while True:
try:
# The first value should be prime.
currentPrime = next(sieve)
except StopIteration:
# Stop when sieve is empty.
print(currentPrime)
break
print(currentPrime)
# Filter out all multiples of currentPrime.
sieve = (x for x in sieve if x % currentPrime)
#print(tuple(sieve))
即使我在循环的每次迭代中都应用了一个过滤器,输出也会贯穿整个范围:
2
3
4
5
6
7
8
9
9
如果我取消对最后一个print调用的注释,我会看到(3, 5, 7, 9),这意味着过滤器和赋值可以sieve正常工作,但是next(sieve)调用以某种方式访问了没有变量指向的原始迭代器。
知道这里发生了什么吗?我正在使用 Python 3.7.0。
UYOU
翻阅古今
相关分类