私の関数はジェネレーターのチェーンを作成します:
def bar(num):
import itertools
some_sequence = (x*1.5 for x in range(num))
some_other_sequence = (x*2.6 for x in range(num))
chained = itertools.chain(some_sequence, some_other_sequence)
return chained
chained
私の関数は時々逆の順序で戻る必要があります。概念的には、次のことができるようになりたいと考えています。
if num < 0:
return reversed(chained)
return chained
不運にも:
>>> reversed(chained)
TypeError: argument to reversed() must be a sequence
私のオプションは何ですか?
これはいくつかのリアルタイム グラフィック レンダリング コードに含まれているため、複雑すぎたり遅くしたりしたくありません。
編集:私が最初にこの質問をしたとき、私はジェネレーターの可逆性について考えていませんでした。多くの人が指摘しているように、ジェネレーターを元に戻すことはできません。
実際、チェーンの平坦化された内容を逆にしたいのです。ジェネレーターの順序だけではありません。
応答に基づいて、itertools.chain を逆にするために使用できる単一の呼び出しはありません。したがって、ここでの唯一の解決策は、少なくとも逆の場合、おそらく両方の場合にリストを使用することだと思います。