2012-08-22 2 views
8

Я генератор определяется следующим образом:TypeError: 'генератор' объект не вызываемая

def lengths(x): 
    for k, v in x.items(): 
     yield v['time_length'] 

И это работает, назвав его

for i in lengths(x): 
    print i 

производит:

3600 
1200 
3600 
300 

которые являются правильными числами.

Однако, когда я называю это так:

somefun(lengths(x)) 

где somefun() определяется как:

def somefun(lengths): 
    for length in lengths(): # <--- ERROR HERE 
     if not is_blahblah(length): return False 

Я получаю сообщение об ошибке:

TypeError: 'generator' object is not callable 

Что я недоразумение ?

ответ

13

Вам не нужно называть генератор, снять скобки ().

Возможно, вас смущает тот факт, что вы используете одно и то же имя для переменной внутри функции в качестве имени генератора; следующая тоже будет работать:

def somefun(lengen): 
    for length in lengen: 
     if not is_blahblah(length): return False 

Параметр, передаваемый функции somefun затем связывается с локальной lengen переменной вместо lengths, чтобы было ясно, что это локальная переменная не то же самое, что и функция lengths() вы определенных в другом месте.

+0

Этот простой huh ... :-D –

+0

@AmigableClarkKant, в чем была логика поставить туда круглые скобки? – unkulunkulu

+0

@unkulunkulu: возможно, путаница с именем функции, которое создает генератор. –

Смежные вопросы