私はいくつかの並列演算を行うことができるように、複数の部分にジェネレータを分割しようとしています。 、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()
をsplitingの:主発電機はg()
によって生成され、gslice()
が、それのsubestを生成し、使用するプログラムの残りのためにそれをもたらすことになっているがあります最初の要素をnext(next(a))
で1回取ることができる何らかのネストしたオブジェクトitertools.islice
を返していますが、もう一度やり直すとエラーが発生します。 list()
がgslice
に適用されても、同じオブジェクトを返す以外は何も表示されません。
この投稿の目的は、gslice
がサブタイトルのg
である発電機を単に生産しない理由とそれを行う方法を尋ねることです。私がの方法でrepeat=2
をproduct
の方法に変更すると、なぜジェネレーター以外でこれを処理したくないのでしょうか?