Iterable, Iterator và Generator, Generator Iterator

Mọi người cho mình hỏi, đến giờ mình vẫn bị nhầm lẫn các khái niệm này cho chưa hiểu tiếng anh nên đọc tài liệu tiếng anh bằng translate thì nó hay bị dịch không đúng nghĩa nên rối, mà tài liệu tiếng việt mỗi page nói một kiểu, mình thực sự là quá khó hiểu, tìm hiểu mấy tối rồi mà vẫn chưa rõ. Mình giải thích lại theo ý hiểu của mình rồi mọi người giúp đỡ mình xem có sai sót chỗ nào không mn nhé. Xin cảm ơn

  • Iterable:

    1. Là một đối tượng cho phép lấy từng phần tử của nó với vòng lặp
    2. Có thể dùng iter() để trả về một iterator
  • Iterator:
    Là một kiểu dữ liệu đã có sẵn, khi Print(type()) sẽ cho thấy nếu nó là Iterator

    1. Không có index nên không thể lấy phần tử theo ý
    2. Có thể dùng Next() để lấy từng phần tử
    3. Trả về StopIteration khi đã gọi hết giá trị
  • Generator (Là một hàm):

    1. Giống một hàm bình thường nhưng khác ở chỗ là có yield để trả về từng phần tử (yield có tác dụng cho ra các giá trị có thể sử dụng next() hoặc for loop)
    2. Khi chạy cho ra 1 Generator Iterator
  • Generator Iterator: (Trong Docs python chỉ ghi: “An object created by a generator” nên mình đoán")
    Khi chạy Generator, việc trả về từng phần tử bằng for loop hoặc next(), trả về StopIteration khi next hết giá trị và việc k có index đã khiến nó trở thành 1 Iterator, và được khởi tạo bởi Generator nên nó được gọi là 1 Generator Iterator

chắc là bạn chưa có khái niệm về dunder method nên cũng khá khó để giải thích cho bạn hiểu rõ ràng

  1. generator là một hàm đặc biệt mà nhớ trạng thái của lần chạy trước đó, dùng để tạo ra các giá trị
  2. iterator là object mà có dunder next method. tất cả các generator là iterator điều ngược lại không đúng
  3. iterable là object mà có dunder iter method trả về một iterator hay bạn hiện thực dunder len và getitem trong một class thì object của class cũng được gọi là iterable
    lấy ví dụ như: zip, filter, map, enumerate object là các iterator và strings, lists, sets, tuples, range, … là các iterable
  4. Một class hiện thực cả hai dunder iter và next thì nó là cả hai iterator và iterable

p/s: bản chất của Python là dunder method vì mọi thứ trong python là object. Hy vọng giúp bạn phần nào

5 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?