2
我想把一個發生器分成多個部分,所以我可以做一些並行計算。還有就是主發電機由g()
和gslice()
生產應該產生它的subest和產生它的程序的其餘部分使用:爲什麼產生itertools.islice產生不可用的嵌套對象?
>>> from itertools import product
>>> from string import digits
>>> def g():
... for i in product(digits, repeat=2):
... yield "".join(['aa']+list(i))
>>> def gslice():
... yield itertools.islice(g(), 3,4)
>>> a=gslice()
>>> next(a)
<itertools.islice object at 0x7fc4dc34ad60>
>>> next(next(a))
'aa03'
>>> next(next(a))
Traceback (most recent call last):
File "<console>", line 1, in <module>
不幸的是,你可以看到itertools.islice
,而不是劈裂g()
,正在產生某種嵌套對象itertools.islice
,您可以使用next(next(a))
取第一個元素,但如果再次嘗試,則會產生錯誤。 list()
適用於gslice
不會列出任何內容,但會返回相同的對象。
這篇文章的目標基本上是問爲什麼gslice
不會簡單地產生一個g
的子版本的發生器,也可以詢問如何做到這一點。如果我將product
方法中的repeat=2
更改爲repeat=10
,那麼爲什麼我們肯定不想通過發生器處理這個問題。