我想玩弄Python中的素數,因此用一個函數來創建一個Sieve of Eratosthenes
:Python函數返回發生器的,而不是名單
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)))
時,一切都按預期工作(打印質數列表)。
我錯過了什麼?
爲什麼函數返回一個生成器而不是一個列表?
我建議你離開充當發電機和使用'名單()'它只有在你真正需要_do_名單。 –
你正在創造一個新的(並且有用的)3.3特性。早期版本不允許這樣做。請參閱[這裏](http://stackoverflow.com/q/16780002/989121)。 – georg
我在本地修改我的代碼以返回生成器。這真的很方便。 – snrlx