Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

Khác biệt giữa Iterable và Iterator trong Python

Iterable có thể hiểu nôm na là đối tượng tạo ra một iterator khi truyền vào hàm built-in iter(). Để một đối tượng trở thành iterable, class của nó cần định nghĩa hai phương thức instance: __len__ và __getitem__. Khi truyền cho iter(), đối tượng này sẽ sinh ra iterator.

Ví dụ minh họa iterable:

string = "Tutorialspoint"
for char in string:
    print(char)

Kết quả

T u t o r i a l s p o i n t

Code trên sử dụng phương thức __getitem__(index) trả về phần tử tại vị trí index. Quy trình:

  • Bắt đầu từ index 0
  • Gọi string.__getitem__(index)
  • Nếu ném ra IndexError thì dừng
  • Thực hiện thân vòng lặp
  • Tăng index, quay lại bước 2

Iterator

Iterator là đối tượng quản lý trạng thái lặp qua một biến nội bộ. Biến này không reset về 0 khi duyệt hết phần tử cuối, mà ném ra StopIteration để báo hiệu kết thúc. Điều này có nghĩa là iterator chỉ được duyệt một lần, như ví dụ sau:

my_list = ['itemOne', 'TutorialsPoints']
iterators_of_some_list = iter(my_list)
for i in iterators_of_some_list:
    print(i)
for j in iterators_of_some_list:  # không chạy
    print(j)
# Nhưng list có thể lặp nhiều lần
for k in my_list:
    print(k)
for l in my_list:  # chạy được
    print(l)

Kết quả

itemOne
TutorialsPoints
itemOne
TutorialsPoints
itemOne
TutorialsPoints

Điều này xảy ra vì phương thức iter() trên iterator trả về chính nó (để nhớ trạng thái hiện tại). Vòng lặp for nội bộ xử lý việc kết thúc khi bắt StopIteration.