はい、itertools の関数は反復子で使用するように設計されています。関数シグネチャが言う理由はiterable
、リスト、タプル、およびイテレータではないその他のイテラブルでも機能するためです。
シーケンスは、特別なメソッドを介して整数インデックスを使用して効率的な要素アクセスをサポートし、シーケンスの長さを返すメソッド__getitem__()
を定義するiterable です。len()
この定義は、反復子ではないすべての iterable のセットとは少し異なります。__getitem__
( , メソッドを持ち、 を持たない (不自由な) カスタム クラスを定義することもできます__len__
。これは、イテレータではない iterable になりますが、それも ではありませんsequence
。)
ただしsequences
、すべてのシーケンスは反復可能であり、複数回反復できるため、探しているものにかなり近いです。
Python に組み込まれているシーケンス タイプの例にはstr
、unicode
、list
、tuple
、bytearray
、buffer
およびが含まれxrange
ます。
用語集から抜粋したいくつかの定義を次に示します。
container
Has a __contains__ method
generator
A function which returns an iterator.
iterable
An object with an __iter__() or __getitem__() method. Examples of
iterables include all sequence types (such as list, str, and
tuple) and some non-sequence types like dict and file. When an
iterable object is passed as an argument to the builtin function
iter(), it returns an iterator for the object. This iterator is
good for one pass over the set of values.
iterator
An iterable which has a next() method. Iterators are required to
have an __iter__() method that returns the iterator object
itself. An iterator is good for one pass over the set of values.
sequence
An iterable which supports efficient element access using integer
indices via the __getitem__() special method and defines a len()
method that returns the length of the sequence. Note that dict
also supports __getitem__() and __len__(), but is considered a
mapping rather than a sequence because the lookups use arbitrary
immutable keys rather than integers. sequences are orderable
iterables.
deque is a sequence, but collections.Sequence does not recognize
deque as a sequence.
>>> isinstance(collections.deque(), collections.Sequence)
False