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函数的参数绑定到局部lengen变量而不是lengths,以明确该局部变量与lengths()您在其他地方定义的函数不同。

于 2012-08-22T13:55:07.063 回答