3
>>> s = 'spam'
>>> s.__next__()

結果は次 のとおりです。トレースバック(最後の最後の呼び出し):ファイル ""、1行目、s._ next _()AttributeError:'str'オブジェクトに属性がありません'_ next _ '

しかし、ドキュメントhttp://docs.python.org/py3k/library/stdtypes.html#iterator-typesで、イテレータタイプについて読むことができます。

Pythonは、コンテナーに対する反復の概念をサポートしています。これは、2つの異なる方法を使用して実装されます。これらは、ユーザー定義クラスが反復をサポートできるようにするために使用されます。以下でより詳細に説明するシーケンスは、常に反復法をサポートします。

以下に説明します。シーケンスタイプ— str、bytes、bytearray、list、tuple、range。

では、なぜstrはnext()をサポートしないのですか?

4

2 に答える 2

3

文字列にはメソッドがありませんが、オブジェクトには__next__メソッドがあります。iterable( )オブジェクトを受け取るには、文字列を 呼び出す必要があります。str_iterator
iterstr_iterator

>>> s = 'spam'
>>> g = iter(s)
>>> g
<str_iterator object at 0xad91d0>
>>> next(g)
's'
>>> next(g)
'p'
>>> next(g)
'a'
>>> next(g)
'm'
>>> next(g)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
StopIteration

イテレータは個別のオブジェクトである必要があることを理解することが重要です。そうしないと、同じオブジェクトに対して同時に複数のイテレータを持つことができなくなります。

>>> g, h = iter(s), iter(s)
>>> next(h)
's'
>>> list(zip(g, h))
[('s', 'p'), ('p', 'a'), ('a', 'm')]
于 2012-09-23T14:11:33.627 に答える
0

イテレータタイプとコンテナタイプは同じものではありません。

__iter__リンク先のドキュメントに記載されているように、イテレータオブジェクトを取得するには、を呼び出す必要があります。

'spam'.__iter__().__next__()

以上

next(iter('spam'))
于 2012-09-23T14:12:25.270 に答える