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在這段代碼中是否只會執行一次呢,而執行一次的話,不是應該"總是"可以取到第一個元素而不會拋出異常嗎?
小白,請教各位大佬!Python 生成器實現方式問題大佬們有什么好的建議?
白豬掌柜的
2019-07-27 00:28:31