python的生成器什么时候停止?

问题描述

我有 python3 函数,如:

def prevIoUs_current(iterable):
    it = iter(iterable)
    prv = None
    cur = it.__next__()
    try:
        while True:
            yield prv,cur
            prv = cur
            cur = it.__next__()
    except stopiteration:
        yield prv,None

我发现yield自然停止,除了阶段不执行。 就像我调用的那样:

s1 = [1,2,3]
g = prevIoUs_current(s1)
for i in range(len(s1)):
    pre,cur = next(g)
    print(pre,cur)

它打印:

None,1
1,2
2,3

我只是不知道我有 while True 条件,我认为它会继续运行直到出错。 但为此,它似乎在列表结束时停止。我不知道为什么它会这样运行。我认为它应该给出如下结果:

None,3  
3,None

解决方法

@user504909 - 这是因为你的范围(len(s1)):
因此,如果您想包含 3,那么正如之前的帖子所建议的那样,您应该将其更改为 - range(len(s1)+1) then。

The range() function has two sets of parameters,as follows:

range(stop)

stop: Number of integers (whole numbers) to generate,starting from zero. eg. range(3) == [0,1,2].