2011-07-20 4 views
0

J'essaye de faire une fonction de générateur qui produit un article sur chaque appel, mais je continue à obtenir le même article. Voici mon code:Fonction de générateur avec 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

Ce code m'a l'air bien (même si vous n'avez pas besoin de déclarer la collection comme globale dans ce cas, ni l'instruction return). Peut-être y a-t-il un problème avec la façon dont vous appelez test()? J'ai mis quatre éléments dans une collection avec des descriptions différentes, et en cours d'exécution test() m'a renvoyé un itérateur avec les quatre éléments différents. –

Répondre

1

Tout d'abord, enlever return, ce n'est pas nécessaire.

Votre problème n'est pas avec test() mais comment vous l'appelez. Ne pas simplement appeler test().

faire quelque chose comme:

for item in test(): 
    print item 

Et vous obtenez un élément à la fois. Qu'est-ce que cela fait est fondamentalement:

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

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

Merci, ça m'a beaucoup aidé. À l'origine, j'essayais d'obtenir un élément en utilisant test(). Next() – blaze