2015-05-29 77 views
0

我想在Python 3.4中使用內置的next()函數創建生成器。這裏是我當前的代碼:Python中的生成器只返回第一個元素

myGenerator = next(t for t in [1,2,3,4]) 
myGenerator 
1 
myGenerator 
1..... 

每當我叫我建的發電機,它只返回1,每次我稱呼它,這很奇怪,因爲我認爲,在發電機的每個元素只能通過一次迭代。我該如何解決這個問題,以便它能按照1,2,3,4的順序打印出來?謝謝您的幫助。

+5

'next'不是你如何構建一個生成器 - 它是如何從它檢索元素......你的代碼實際上是'myGenerator = 1' –

回答

2

這是一個有點漂亮,因爲你確實有你想要的發電機,這是

(t for t in [1,2,3,4]) 

但你在它上面運行next。如果你看看its documentation,你可以看到它正在執行文檔所說的內容:你向生成器應用next,它返回一個對象,並且你將這個對象綁定到你所謂的myGenerator(它可能是你的,但它不是一個生成器) 。每次你調用它,它都會評估一個簡單的對象。

>>> myGenerator = (t for t in [1,2,3,4]) 
>>> print next(myGenerator) 
1 
>>> print next(myGenerator) 
2 
0

如果你不知道如何使用next,我建議你使用yield

def g(l): 
    for i,x in enumerate(l): 
     yield x 
     if i == len(l): 
      break 

for i in g([1,2,3,4]): 
    print i 

演示:

1 
2 
3 
4 

yield可以做同樣的功能。

相關問題