8

Pythonでstrオブジェクトをチェックしていたところ、Python 2.7のstrオブジェクトには__iter__()メソッドもnext()メソッドもありませんが、Python 3.0ではstrオブジェクトに__iter__()メソッドがあるため、反復可能であることがわかりました。ただし、Python2.7で反復可能であるかのようにstrオブジェクトを使用することはできます。たとえば、forループでそれらを使用できます。これはどのように作動しますか?

4

1 に答える 1

7

簡単な答え:iter(s)反復可能なオブジェクトを返すからです。

より長い答え:メソッドをiter()探しますが、__iter__()メソッドが見つからない場合は、それ自体を構築して反復しようとします。__getitem__()0から始まる整数インデックスをサポートする任意のオブジェクトを使用して、単純なイテレータを作成できます。__getitem__()リスト/文字列のインデックス作成操作の背後にある関数です。例:s[0]

>>> "abc".__iter__()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'str' object has no attribute '__iter__'
>>> iter("abc")
<iterator object at 0x1004ad790>
>>> iter("abc").next()
'a'

詳細はこちらをご覧ください。

于 2012-05-09T04:23:35.967 に答える