TypeError:'generator'对象不可调用

时间:2012-08-22 13:53:59

标签: python generator yield

我有一个像这样定义的生成器:

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

我误解了什么?

1 个答案:

答案 0 :(得分:17)

您无需致电您的发电机,请移除()括号。

您可能会对函数内部变量使用相同名称作为生成器名称这一事实感到困惑;以下内容也适用:

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

传递给somefun函数的参数然后绑定到本地lengen变量而不是lengths,以明确该局部变量与lengths()不同{1}}您在别处定义的功能。