2013-07-21 5 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 
Смежные вопросы