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