2012-08-22 29 views
8

bir jeneratör böyle tanımlamış:TypeError: 'jeneratör' nesne çağrılabilir değil

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

Ve ürettiği

for i in lengths(x): 
    print i 

ile çağırarak, çalışır:

3600 
1200 
3600 
300 

Doğru sayılar. Bu hata mesajı alıyorum

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

:

TypeError: 'generator' object is not callable 

Ne yanlış anlama am somefun() olarak tanımlanır nerede

somefun(lengths(x)) 

: Öyle gibi diyoruz Ancak

, ?

cevap

13

Jeneratörünüzü aramanıza gerek yoktur, () parantezlerini kaldırın.

Büyük olasılıkla, işlevin içindeki değişken için aynı adı kullandığınız için jeneratörün adıyla karıştırılıyor olabilirsiniz; Aşağıdaki çok çalışacaktır:

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

somefun işlevine iletilen bir parametre daha sonra yerine lengths yerel lengen değişkene bağlıdır, bu açıklığa kavuşturmak için bu yerel değişken lengths() fonksiyonu olarak aynı şey olmadığını sen başka yerde tanımlanmış.

+0

Bu basit huh ...: -D –

+0

@AmigableClarkKant, burada parantezleri ilk sırada yerleştirmenin mantığı neydi? – unkulunkulu

+0

@unkulunkulu: muhtemelen üreteci üreten işlev adıyla karışıklık. –

İlgili konular