我想在Python 3.4中使用內置的next()函數創建生成器。這裏是我當前的代碼:Python中的生成器只返回第一個元素
myGenerator = next(t for t in [1,2,3,4])
myGenerator
1
myGenerator
1.....
每當我叫我建的發電機,它只返回1,每次我稱呼它,這很奇怪,因爲我認爲,在發電機的每個元素只能通過一次迭代。我該如何解決這個問題,以便它能按照1,2,3,4的順序打印出來?謝謝您的幫助。
我想在Python 3.4中使用內置的next()函數創建生成器。這裏是我當前的代碼:Python中的生成器只返回第一個元素
myGenerator = next(t for t in [1,2,3,4])
myGenerator
1
myGenerator
1.....
每當我叫我建的發電機,它只返回1,每次我稱呼它,這很奇怪,因爲我認爲,在發電機的每個元素只能通過一次迭代。我該如何解決這個問題,以便它能按照1,2,3,4的順序打印出來?謝謝您的幫助。
這是一個有點漂亮,因爲你確實有你想要的發電機,這是
(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
如果你不知道如何使用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
可以做同樣的功能。
'next'不是你如何構建一個生成器 - 它是如何從它檢索元素......你的代碼實際上是'myGenerator = 1' –