我有一个像这样定义的生成器:
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() 您在别处定义的功能。
你不需要打电话给你的发电机,删除 () 括号。
您可能会对函数内部变量使用相同名称作为生成器名称这一事实感到困惑;以下内容也适用:
def somefun(lengen):
for length in lengen:
if not is_blahblah(length): return False
传递给的参数 somefun 然后将函数绑定到本地 lengen 变量而不是 lengths,明确表示该局部变量与该变量不同 lengths() 您在别处定义的功能。