18

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

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

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

4

1 に答える 1

21

ジェネレータを呼び出す必要はありません()。角かっこを削除してください。

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

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

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

于 2012-08-22T13:55:07.063 に答える