为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

白猪掌柜的 2019-07-27 00:28:31
defaccumulate(iterable,func=operator.add):'Returnrunningtotals'#accumulate([1,2,3,4,5])-->1361015#accumulate([1,2,3,4,5],operator.mul)-->12624120it=iter(iterable)try:total=next(it)exceptStopIteration:returnyieldtotalforelementinit: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在这段代码中是否只会执行一次呢,而执行一次的话,不是应该"总是"可以取到第一个元素而不会抛出异常吗?
查看完整描述

2 回答

?
尚方宝剑之说

TA贡献1788条经验 获得超4个赞

当next取不到下一个元素的时候就会出现StopIteration,其实就是说StopIteration是作为一个列表遍历的结尾标识存在的。
                            
查看完整回答
反对 回复 2019-07-27
  • 2 回答
  • 0 关注
  • 187 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信