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()您在其他地方定义的函数不同.