web-dev-qa-db-ja.com

TypeError: 'generator'オブジェクトは呼び出せません

私はこのように定義されたジェネレータを持っています:

_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
_

私は何を誤解していますか?

ジェネレーターを呼び出す必要はありません。_()_ブラケットを削除してください。

関数内の変数にジェネレーターの名前と同じ名前を使用しているという事実におそらく混乱しています。以下も機能します。

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

次に、somefun関数に渡されたパラメーターがlengenではなくローカルlengths変数にバインドされ、そのローカル変数がlengths()と同じものではないことを明確にします。他の場所で定義した関数。

17
Martijn Pieters