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é?
6
A
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
- 1. Python - L'oggetto 'str' non ha attributi 'close'
- 2. Coda iterabile Python
- 3. Perché TFormatSettings non si comporta come previsto?
- 4. Scrapy: oggetto 'str' non ha alcun attributo 'iter'
- 5. Python - implementa __iter__ o restituisce un __iter__ di lista
- 6. Come si ordinano le tuple in ordine inverso, eppure si rompono i legami non invertiti? (Python)
- 7. Perché un modulo Python si comporta come un singleton?
- 8. python 2.7 in minuscolo
- 9. AttributeError: l'oggetto 'str' non ha attributo 'decodifica'
- 10. Python re.findall si comporta in modo strano
- 11. Python 2.7 concurrent.futures.ThreadPoolExecutor non parallelizzare
- 12. Perché un PriorityQueue non si comporta come una coda?
- 13. L'oggetto 'str' non ha attributo 'decode'
- 14. Come si trasforma & str in ~ str in Rust?
- 15. Perché capistrano si comporta così?
- 16. In Python (2.7), perché os.remove non è identico a os.unlink?
- 17. Perché console.log si comporta in questo modo?
- 18. Python 2.7 e 3.3.2, perché int ('0.0') non funziona?
- 19. Perché la var si comporta come cov in R?
- 20. Thread.join non si comporta come mi aspettavo in scala
- 21. Python - è richiesto un byte come oggetto, non str
- 22. Perchè itertools.cycle di Python deve creare una copia del iterabile?
- 23. TypeError: 'int' oggetto non è iterabile - Python
- 24. AttributeError: l'oggetto 'str' non ha attributo 'iteritems'
- 25. STR non ha alcun attributo '_meta'
- 26. È oggetto file in python un iterabile
- 27. I descrittori Python non funzionano in Python 2.7
- 28. MSSQL in python 2.7
- 29. Perché InstanceContextMode.PerSession si comporta come PerCall quando si utilizza wsHttpBinding?
- 30. Documentazione Python: iterabile molte volte?
Questo è un duplicato di: http://stackoverflow.com/questions/5113133/why-do-python-strings-non-have-iter-function – pts