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é?
6
A
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
- 1. Python - el objeto 'str' no tiene el atributo 'cerrar'
- 2. TypeError: objeto 'str' no es exigible (Python)
- 3. ¿Por qué Iterator tiene un método contains pero Iterable no, en Scala 2.8?
- 4. AttributeError: el objeto 'NoneType' no tiene atributo 'str' en suds
- 5. ¿Por qué el codificadorFile de Data.Binary no actúa como flojo?
- 6. ¿Por qué obtengo un objeto no es un error iterable?
- 7. ¿Por qué este código obtiene este objeto 'str' no tiene ningún atributo 'get_match_routes' error?
- 8. TypeError: objeto 'float' no iterable
- 9. ¿Objeto que actúa como una matriz? (PHP)
- 10. ¿por qué las cadenas de Python no tienen la función __iter__?
- 11. ¿Qué hace el rendimiento en Python 2.7?
- 12. python s3 usando boto, dice 'atributo error:' str 'objeto no tiene atributo' conexión '
- 13. Python iterable Cola
- 14. ¿Qué función actúa como .SelectMany() en jQuery?
- 15. ¿Por qué String.IsNullOrEmpty (str) y no str.IsNullOrEmpty()?
- 16. python 2.7/exec/¿qué está mal?
- 17. Python 2.7: tipo de objeto "elementtree" no tiene atributo de código "register_namespace"
- 18. rendimiento str en Python
- 19. ¿Por qué Python no tiene variables estáticas?
- 20. ¿Por qué la clase python datetime tiene un método 'fromtimestamp', pero no un método 'totimestamp'? clase
- 21. TypeError: objeto 'RelatedManager' no se Iterable
- 22. python hacer que la clase sea iterable al devolver incrustado iterable
- 23. Python 2.7 en Ubuntu
- 24. python: no se puede concatenar objetos 'str' y 'long'
- 25. ¿Se burla de un método para lanzar una excepción (moq), pero actúa como el objeto burlado?
- 26. python 2.7 minúsculas
- 27. ¿Por qué no hay una interfaz "Iterable" en el STL?
- 28. ¿Por qué Unix tiene fork() pero no CreateProcess()?
- 29. Python 2.7 o Python 3 (por velocidad)?
- 30. El objeto 'RelatedManager' no es iterable Django
Este es un duplicado de: http://stackoverflow.com/questions/5113133/why-do-python-strings-not-have-iter-function – pts