猿问

小白,请教各位大佬!Python 生成器实现方式问题大佬们有什么好的建议?

defaccumulate(iterable,func=operator.add):
'Returnrunningtotals'
#accumulate([1,2,3,4,5])-->1361015
#accumulate([1,2,3,4,5],operator.mul)-->12624120
it=iter(iterable)
try:
total=next(it)
exceptStopIteration:
return
yieldtotal
forelementinit:
total=func(total,element)
yieldtotal
这是Python文档关于itertools.accumulate函数的说明https://docs.python.org/zh-cn...
在我的理解里(应该是错误的理解),total=next(it)总会取到第一个值,而永远不会抛出异常,谁能告诉会抛出这个异常的实例呢?
请问在什么情况下,调用这个函数会抛出StopIteration异常呢,传入一个可迭代对象实参后,try:total=next(it),不是应该总是可以取到第一个元素吗,为什么需要exceptStopIteration呢,在什么情况下才会抛出这个异常呢?
感谢回答,我明白next取不到下一个元素的时候就抛出StopIteration,但是这段代码运行后取一次next然后就会进入forelementinit:的这个循环中,并在这个循环结束时就结束这个函数.而不会再执行上面的next,那么怎么会抛出stopIteration呢?可以具个具体的实例吗
就是说next在这段代码中是否只会执行一次呢,而执行一次的话,不是应该"总是"可以取到第一个元素而不会抛出异常吗?
白猪掌柜的
浏览 188回答 2
2回答

尚方宝剑之说

当next取不到下一个元素的时候就会出现StopIteration,其实就是说StopIteration是作为一个列表遍历的结尾标识存在的。
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答