2

我试图实现一个要使用 n 次的函数生成器。我的想法是创建一个生成器对象,然后将该对象分配给另一个变量,并将重新分配的变量作为函数调用,例如:

def generator:
   [...]
   yield ...

for x in xrange(10):
   function = generator
   print function(50)

当我调用 print 函数时,我观察到它function(50)没有被调用。相反,输出是:<generator object...>. 我试图通过将这个函数分配给一个生成器函数来使用这个函数 10 次,并将这个新变量用作生成器函数。

我该如何纠正?

4

2 回答 2

5

生成器函数返回生成器对象。您需要list(gen)将它们转换为 alist或只是迭代它们。

>>> def testFunc(num):
        for i in range(10, num):
            yield i


>>> testFunc(15)
<generator object testFunc at 0x02A18170>
>>> list(testFunc(15))
[10, 11, 12, 13, 14]
>>> for elem in testFunc(15):
        print elem


10
11
12
13
14

这个问题对此进行了更多解释:Python yield 关键字解释

于 2013-07-21T19:18:59.887 回答
1

您还可以使用生成器表达式创建生成器对象:

>>> (i for i in range(10, 15))
<generator object <genexpr> at 0x0258AF80>
>>> list(i for i in range(10, 15))
[10, 11, 12, 13, 14]
>>> n, m = 10, 15
>>> print ('{}\n'*(m-n)).format(*(i for i in range(n, m)))
10
11
12
13
14
于 2013-07-21T20:05:45.760 回答