2011-07-20 103 views
0

我想做一個生成器函數,每次調用產生一個項目,但是我不斷收到相同的項目。這裏是我的代碼:發電機功能與pymongo

1 from pymongo import Connection 
    2 
    3 connection = Connection() 
    4 db = connection.store 
    5 collection = db.products 
    6 
    7 def test(): 
    8   global collection #using a global variable just for the test. 
    9   items = collection.find() 
    10  for item in items: 
    11     yield item['description'] 
    12  return 
+0

此代碼看起來好像沒什麼問題(儘管你不需要在這種情況下,申報集合作爲全球性的,也不需要return語句)。也許你打電話給test()有一個問題?我將四個項目放入具有不同描述的集合中,並且運行test()向我返回了一個包含四個不同項目的迭代器。 –

回答

1

首先,刪除return,這是沒有必要的。

您的問題不在於test(),而是您如何調用它。不要只撥打test()

做這樣的事情:

for item in test(): 
    print item 

而且你會在同一時間得到一個項目。這是什麼東西做的主要是:

from exceptions import StopIteration 
it = iter(test()) 

while True: 
    try: 
     item = it.next() 
    except StopIteration: 
     break 
    print item 
+0

謝謝,這有很大的幫助。最初,我試圖使用test()獲取一個項目。next() – blaze