TypeError:'generator'对象不可调用

Pro*_*ica 14 python yield generator

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

def lengths(x):
    for k, v in x.items():
        yield v['time_length']
Run Code Online (Sandbox Code Playgroud)

它起作用,称之为

for i in lengths(x):
    print i
Run Code Online (Sandbox Code Playgroud)

生产:

3600
1200
3600
300
Run Code Online (Sandbox Code Playgroud)

这是正确的数字.

但是,当我这样称呼时:

somefun(lengths(x))
Run Code Online (Sandbox Code Playgroud)

其中somefun()定义为:

def somefun(lengths):
    for length in lengths():  # <--- ERROR HERE
        if not is_blahblah(length): return False
Run Code Online (Sandbox Code Playgroud)

我收到此错误消息:

TypeError: 'generator' object is not callable
Run Code Online (Sandbox Code Playgroud)

我有什么误会?

Mar*_*ers 18

您无需致电您的发电机,移除()支架.

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

def somefun(lengen):
    for length in lengen:
        if not is_blahblah(length): return False
Run Code Online (Sandbox Code Playgroud)

传递给somefun函数的参数然后绑定到局部lengen变量而不是lengths,以明确该局部变量与lengths()您在其他地方定义的函数不同.

  • @AmigableClarkKant,:)逻辑对于初学者来说是一个很棒的工具.我的意思是,函数的参数工作接近'替换'.因此,如果你用你提供的函数(长度(x)`)替换你的`lengths`参数,那么你将得到`长度为(x)()的长度:`行,看起来很奇怪吧:) (4认同)
  • @AmigableClarkKant,然后我们欢迎你来到python的温暖土地,逻辑工作和程序员都很高兴. (3认同)