Tôi đã kiểm tra các đối tượng str bằng Python, và tôi nhận ra rằng đối tượng str trong Python 2.7 không có phương thức __iter__()
hoặc phương thức next()
, trong khi đối tượng str 3.0 có phương thức __iter__()
và do đó chúng có thể lặp lại được. Tuy nhiên, tôi vẫn có thể sử dụng các đối tượng str như thể chúng có thể lặp lại trong Python 2.7. Ví dụ, tôi có thể sử dụng chúng cho các vòng lặp. Cái này hoạt động ra sao?đối tượng str trong Python 2.7 không có __iter__, nhưng nó hoạt động như iterable. Tại sao?
6
A
Trả lời
4
Câu trả lời đơn giản: vì iter(s)
trả về một đối tượng có thể lặp lại.
Câu trả lời dài hơn: iter()
tìm phương thức __iter__()
, nhưng nếu nó không tìm thấy phương pháp cố gắng xây dựng và lặp lại chính nó. Bất kỳ đối tượng nào hỗ trợ __getitem__()
với chỉ số nguyên bắt đầu từ 0 có thể được sử dụng để tạo một trình lặp đơn giản. __getitem__()
là chức năng hoạt động lập chỉ mục/chuỗi chỉ mục, ví dụ: 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'
Xem chi tiết here.
Các vấn đề liên quan
- 1. __iter__ hoạt động như thế nào?
- 2. Python - đối tượng 'str' không có thuộc tính 'close'
- 3. Mô tả Python không hoạt động trong Python 2.7
- 4. là đối tượng tập tin trong python một iterable
- 5. Python 2.7 và 3.3.2, tại sao int ('0.0') không hoạt động?
- 6. Tại sao KeyboardInterrupt không hoạt động trong python?
- 7. Tại sao không có giao diện "Iterable" trong STL?
- 8. Tại sao bộ phận này không hoạt động trong Python?
- 9. tại sao ngắt() không hoạt động như mong đợi và làm thế nào nó hoạt động
- 10. Tại sao mã này nhận được đối tượng 'str' này không có lỗi 'get_match_routes' thuộc tính?
- 11. Tại sao Iterator có phương thức chứa nhưng Iterable thì không, trong Scala 2.8?
- 12. Tại sao mô-đun python hoạt động như một singleton?
- 13. Đối tượng Giấy phép Aspose hoạt động như thế nào? Nó có tồn tại mãi mãi không?
- 14. Tại sao __unicode__ không hoạt động nhưng __str__ làm gì?
- 15. Tại sao các lớp và hàm rỗng của Python hoạt động như các thùng chứa dữ liệu tùy ý, nhưng không phải là các đối tượng khác?
- 16. Tại sao Console.Readline không hoạt động nhưng Console.Readline() thực hiện?
- 17. parallel.foreach hoạt động, nhưng tại sao?
- 18. ManyRelatedManager đối tượng không phải là iterable
- 19. Tại sao không phải là Enumerations Iterable?
- 20. Python 2.7: loại đối tượng "ElementTree" không có thuộc tính "register_namespace"
- 21. Tại sao [] .append() không hoạt động trong python?
- 22. Tại sao kết nối trong DB-API của Python không có hoạt động "bắt đầu"?
- 23. Python: Tại sao thời gian nhập không hoạt động trong thời gian() nhưng hoạt động cho time.sleep()?
- 24. không thành công, nhưng không có đối tượng lỗi nào được trả về. Tại sao?
- 25. Tại sao Get-Date dường như trả về đối tượng DateTime, nhưng BinarySerializer cho biết nó trả về một PSObject?
- 26. Tại sao không thể lấy Py_buffer từ đối tượng mảng?
- 27. AttributeError: đối tượng 'str' không có thuộc tính 'iteritems'
- 28. hiệu suất str trong python
- 29. 7.toBinayString không hoạt động trong scala REPL, nhưng với val k = 7 nó hoạt động
- 30. Tại sao @ foo.setter trong Python không hoạt động đối với tôi?
Đây là bản sao của: http://stackoverflow.com/questions/5113133/why-do-python-strings-not-have-iter-function – pts