发电机何时停止 python?
when the generator stop for 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 自然停止,不执行 except 阶段。
就像我调用:
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, 1
1, 2
2, 3
3, None
@user504909 - 这是因为你的 range(len(s1)):
因此,如果你想包括 3,那么如前所述 post 建议你应该将其更改为 - 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].
我有 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 自然停止,不执行 except 阶段。 就像我调用:
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, 1
1, 2
2, 3
3, None
@user504909 - 这是因为你的 range(len(s1)):
因此,如果你想包括 3,那么如前所述 post 建议你应该将其更改为 - 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].