2012-08-22 22 views
8

he un generador definido así:TypeError: objeto 'generador' no es exigible

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

y funciona, llamándola con

for i in lengths(x): 
    print i 

produce:

3600 
1200 
3600 
300 

cuales son los números correctos.

Sin embargo, cuando la llamo así:

somefun(lengths(x)) 

donde se define somefun() como:

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

me sale este mensaje de error:

TypeError: 'generator' object is not callable 

¿Qué estoy mal entendido ?

Respuesta

13

No necesita llamar a su generador, retire los soportes ().

Probablemente esté confundido por el hecho de que usa el mismo nombre para la variable dentro de la función como el nombre del generador; el siguiente también funcionará:

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

Un parámetro que se pasa a la función somefun está obligado entonces a la lengen variable local en lugar de lengths, para dejar en claro que esa variable local no es lo mismo que la función lengths() se definido en otro lugar.

+0

Eso simple eh ... :-D –

+0

@AmigableClarkKant, ¿cuál era la lógica para poner los paréntesis allí en primer lugar? – unkulunkulu

+0

@unkulunkulu: probablemente confusión con el nombre de función que produce el generador. –

Cuestiones relacionadas