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

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()函数不同。

关于python - TypeError:'generator'对象不可调用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12074726/

10-12 19:07