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

标签 python python-3.x generator

这几乎可以肯定是由于我对生成器的工作原理一无所知,但我完全迷失了。

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

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/

相关文章:

python-3.x - Python Graphite 烯与 Apollo Federation 集成时出现问题

Android,随机不会连续两次重复相同的数字

java - 如何从 2D 表格上设置的房间列表(给定房间大小)生成房间以及它们之间的连接?

python - 将带有回调的函数变成 Python 生成器?

Python - 在列中编写列表列表

Python - 指定要在命令行上使用文件中的哪个函数

python - Keras Model.fit 详细格式

python - 如何将 SimpleGUI 与 Python 2.7 和 3.0 shell 集成

python - Pandas 的每日频率计数

python - python audiotools从内存打开