2012-05-09 11 views
6

Stavo controllando gli oggetti str in Python e mi sono reso conto che lo str oggetto in Python 2.7 non ha né il metodo __iter__() né il metodo next(), mentre in Python 3.0 gli oggetti str hanno il metodo e quindi sono iterabili. Tuttavia, posso ancora usare gli oggetti str come se fossero iterabili in Python 2.7. Ad esempio, posso usarli in loop per. Come funziona?str in Python 2.7 non ha __iter__, eppure si comporta come iterabile. Perché?

+0

Questo è un duplicato di: http://stackoverflow.com/questions/5113133/why-do-python-strings-non-have-iter-function – pts

risposta

4

Risposta semplice: perché iter(s) restituisce un oggetto iterabile.

Risposta più lunga: iter() cerca un metodo __iter__(), ma se non lo trova, tenta di costruire e iteratore stesso. Qualsiasi oggetto che supporti __getitem__() con indici interi che iniziano con 0 può essere utilizzato per creare un semplice iteratore. __getitem__() è la funzione dietro le operazioni di indicizzazione stringa/elenco, ad esempio 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' 

Vedere here per dettagli.

Problemi correlati