2011-07-20 8 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()を呼び出す方法に問題がありますか?私は4つのアイテムを異なる記述でコレクションに入れ、test()を実行すると4つの異なるアイテムのイテレータが返されました。 –

答えて

1

まず、returnを削除してください、それは必要ではありません。

あなたの問題はtest()ではありませんが、どのように呼びますか。 test()に電話するだけではありません。

ような何か:

for item in test(): 
    print item 

をそして、あなたは、一度に1つのアイテムを取得します。これは基本的には

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

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

ありがとう、それは多くの助けとなりました。もともと、私はtest()を使ってアイテムを取得しようとしていました。next() – blaze

関連する問題