Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 带pymongo的生成函数_Python_Mongodb_Generator_Pymongo - Fatal编程技术网

Python 带pymongo的生成函数

Python 带pymongo的生成函数,python,mongodb,generator,pymongo,Python,Mongodb,Generator,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

我试图生成一个生成器函数,在每次调用时生成一个项,但是我一直得到相同的项。这是我的密码:

  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

首先,删除
返回
,这是不必要的

您的问题不在于
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

我觉得这段代码很好(尽管在本例中不需要将集合声明为全局集合,也不需要return语句)。也许您如何调用test()存在问题?我将四个项放入一个具有不同描述的集合中,运行test()返回一个包含四个不同项的迭代器。谢谢,这对我帮助很大。最初,我试图使用test()获取一个项。next()