2012-05-09 8 views
6

Estaba revisando objetos str en Python, y me di cuenta de que el objeto str en Python 2.7 no tiene el método __iter__() ni el método next(), mientras que en Python 3.0 los objetos str tienen el método __iter__(), y por lo tanto son iterables. Sin embargo, todavía puedo usar objetos str como si fueran iterables en Python 2.7. Por ejemplo, puedo usarlos para los bucles. ¿Como funciona esto?str objeto en Python 2.7 no tiene __iter__, pero actúa como iterable. ¿Por qué?

+0

Este es un duplicado de: http://stackoverflow.com/questions/5113133/why-do-python-strings-not-have-iter-function – pts

Respuesta

4

Respuesta simple: porque iter(s) devuelve un objeto iterable.

Una respuesta más larga: iter() busca un método __iter__(), pero si no encuentra uno, intenta construirlo e iterar él mismo. Cualquier objeto que admita __getitem__() con índices enteros que comiencen en 0 se puede usar para crear un iterador simple. __getitem__() es la función detrás de las operaciones de indexación de lista/cadena, por ejemplo 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' 

Ver here para más detalles.

Cuestiones relacionadas