【发布时间】:2014-08-24 16:25:54
【问题描述】:
我遇到了一个错误,它是由检查“if x in generator”的结果变化引起的
def primes(upper_limit):
for n in range(2, upper_limit):
if all(n % i > 0 for i in range(2, n)):
yield n
first_hundred_primes = primes(100)
print(5 in first_hundred_primes)
print(5 in first_hundred_primes)
print(5 in first_hundred_primes)
print(5 in first_hundred_primes)
print(5 in first_hundred_primes)
这给出了输出:
True
False
False
False
False
我假设不是要检查一个对象是否存在于生成器中,但如果是这种情况,为什么它不抛出一些错误,为什么它会起作用?
>>> hundred_generator = range(1,100)
>>> 50 in hundred_generator
True
>>> 50 in hundred_generator
True
>>> 50 in hundred_generator
True
我通常在检查其中是否存在某个对象(以加快检查速度)之前将生成器变成一个集合,这可以解决问题,但我非常想知道这里发生了什么?
【问题讨论】:
标签: python list range generator