2013-07-21 3 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으로 변환하거나 그냥 반복하려면 list(gen)해야합니다.

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