函数生成器Python

时间:2013-07-21 19:16:20

标签: python generator

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

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

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

当我调用print函数时,我发现没有调用function(50)。相反,输出为:<generator object...>。我试图通过将此函数分配给生成器函数10次并使用此新变量作为生成器函数来尝试使用此函数。

我该如何纠正?

2 个答案:

答案 0 :(得分:5)

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

>>> 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

此问题更多地解释了它:The Python yield keyword explained

答案 1 :(得分: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