gpt4 book ai didi

python - 变量引用了错误的迭代器,即使在确认重新分配之后也是如此

转载 作者:行者123 更新时间:2023-12-01 08:20:13 25 4
gpt4 key购买 nike

我有以下循环重新分配给迭代器变量:

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 code> 工作正常,但 next(sieve) 调用以某种方式访问​​没有变量指向的原始迭代器。

知道这里发生了什么吗?我使用的是 Python 3.7.0。

最佳答案

正如 user2357112 所说,“currentPrime 在使用时查找,而不是在生成器创建时查找。”

一种解决方案是使用带有 lambda 的 filter 来本地化 currentPrime 的当前值。请注意 lambda 如何使用默认参数来创建局部变量:

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
# Filter out all multiples of currentPrime.
sieve = filter(lambda x, prime=currentPrime: x % prime, sieve)

关于python - 变量引用了错误的迭代器,即使在确认重新分配之后也是如此,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54695432/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com