这几乎可以肯定是由于我对生成器的工作原理一无所知,但我完全迷失了。
如果我以交互方式创建以下生成器:
def neighborhood(iterable):
iterator = iter(iterable)
prev = None
item = next(iterator)
for post in iterator:
yield (prev,item,post)
prev = item
item = post
yield (prev,item,None)
然后像这样测试它:
for prev,item,next in neighborhood([1,2,3,4,5]):
print(prev, item, next)
它产生:
None 1 2
1 2 3
2 3 4
3 4 5
4 5 None
如预期。如果我再次运行它,或尝试以任何方式重新定义它,我会得到一个
'NoneType' object is not callable"
错误。
最佳答案
当你做的时候
for prev,item,next in ...
# ^^^^
您隐藏了内置的 next
函数。下次您尝试使用您的生成器时,它会失败,因为它获取您的 next
变量而不是它需要的函数。
关于python - 为什么这个 python 生成器函数只能正确运行一次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38796024/