2012-08-22 19 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関数に渡されるパラメータは、代わりにlengthsのローカルlengen変数にバインドされ、それを明確にするために、ローカル変数はlengths()機能と同じものではありませんことをご他の場所で定義されています。

+0

それは簡単ですね:-D –

+0

@AmigableClarkKant、最初にカッコを入れるロジックは何ですか? – unkulunkulu

+0

@unkulunkulu:おそらく、ジェネレータを生成する関数名と混同している可能性があります。 –

関連する問題