2012-08-22 10 views
8

Mam generator zdefiniowane tak:TypeError: 'generator' obiekt nie jest wymagalne

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

I to działa, nazywając go

for i in lengths(x): 
    print i 

produkuje:

3600 
1200 
3600 
300 

które są poprawnymi liczbami.

Jednak, kiedy nazywają to tak:

somefun(lengths(x)) 

gdzie somefun() jest zdefiniowany jako:

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

otrzymuję komunikat o błędzie:

TypeError: 'generator' object is not callable 

Co ja nieporozumienie ?

Odpowiedz

13

Nie trzeba wywoływać generatora, usuwać nawiasów ().

Prawdopodobnie jest pan mylony z tym, że używa się tej samej nazwy dla zmiennej wewnątrz funkcji jako nazwy generatora; dodaje zadziała też:

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

Parametr przekazany do funkcji somefun jest wówczas zobowiązany do lokalnego lengen zmiennej zamiast lengths, aby było jasne, że zmienna lokalna nie jest to samo, jak funkcja lengths() ty zdefiniowane gdzie indziej.

+0

To proste huh ... :-D –

+0

@AmigableClarkKant, jaka była logika, aby umieścić nawiasy tam na pierwszym miejscu? – unkulunkulu

+0

@unkulunkulu: prawdopodobnie pomyłka z nazwą funkcji, która generuje generator. –

Powiązane problemy