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文檔關(guān)于itertools.accumulate函數(shù)的說明https://docs.python.org/zh-cn...在我的理解里(應(yīng)該是錯(cuò)誤的理解),total=next(it)總會(huì)取到第一個(gè)值,而永遠(yuǎn)不會(huì)拋出異常,誰能告訴會(huì)拋出這個(gè)異常的實(shí)例呢?請問在什么情況下,調(diào)用這個(gè)函數(shù)會(huì)拋出StopIteration異常呢,傳入一個(gè)可迭代對象實(shí)參后,try:total=next(it),不是應(yīng)該總是可以取到第一個(gè)元素嗎,為什么需要exceptStopIteration呢,在什么情況下才會(huì)拋出這個(gè)異常呢?感謝回答,我明白next取不到下一個(gè)元素的時(shí)候就拋出StopIteration,但是這段代碼運(yùn)行后取一次next然后就會(huì)進(jìn)入forelementinit:的這個(gè)循環(huán)中,并在這個(gè)循環(huán)結(jié)束時(shí)就結(jié)束這個(gè)函數(shù).而不會(huì)再執(zhí)行上面的next,那么怎么會(huì)拋出stopIteration呢?可以具個(gè)具體的實(shí)例嗎就是說next在這段代碼中是否只會(huì)執(zhí)行一次呢,而執(zhí)行一次的話,不是應(yīng)該"總是"可以取到第一個(gè)元素而不會(huì)拋出異常嗎?
Python 生成器實(shí)現(xiàn)方式問題求解答!
慕桂英3389331
2019-12-02 04:04:32