为什么此python生成器函数只能正确运行一次?

野蛮人

几乎可以肯定,这是我对发电机工作方式的无知,但我完全迷失了。

如果我以交互方式创建以下生成器:

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”对象不可调用”

错误。

user2357112支持Monica

你什么时候做

for prev,item,next in ...
#             ^^^^

您遮盖了内置next功能。下次尝试使用生成器时,它会失败,因为它获取next变量而不是所需的函数。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章