2012-05-09 22 views
6

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?

+0

Đây là bản sao của: http://stackoverflow.com/questions/5113133/why-do-python-strings-not-have-iter-function – pts

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