2013-07-21 51 views
2

我試圖實現函數發生器使用n次。 我的想法是創建一個生成器對象,然後將該對象賦給另一個變量,並呼籲重新分配變量的函數,例如:函數發生器Python

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

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

當我調用打印功能,我觀察到function(50)不調用。取而代之的是:<generator object...>。我試圖通過將它分配給一個生成器函數來使用這個函數10次,並使用這個新變量作爲生成器函數。

我該如何解決這個問題?

+0

請張貼一個可運行的代碼示例。 – AdamKG

回答

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

你也可以創建一個生成器表達式生成器對象:

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