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 に答える