【发布时间】:2014-03-17 00:05:43
【问题描述】:
我想在 Python 中使用素数,因此使用一个函数来创建 Sieve of Eratosthenes:
def primes(limit):
a = [True] * limit
a[0] = a[1] = False
for (i, isprime) in enumerate(a):
if isprime:
yield i
for n in range(i*i, limit, i):
a[n] = False
return list(a)
在我看来,这个函数肯定会返回一个列表,但是当我执行print(primes(1000)) 时,我只会得到<generator object primes at 0x0000000002C5C558> 作为输出。当使用print(list(primes(1000))) 时,一切都按预期工作(打印素数列表)。
我错过了什么?
为什么函数返回的是生成器而不是列表?
【问题讨论】:
-
我建议将函数保留为生成器并仅在您确实确实需要列表时使用
list()。 -
您正在使用 3.3 的一个新功能(并且可能有用)。早期版本不允许这样做。见here。
-
我在本地修改了我的代码以返回生成器。真是方便多了。
标签: python list python-3.x generator