Iterator là một đối tượng trong Python cho phép bạn duyệt qua một tập hợp các giá trị một cách tuần tự mà không cần phải biết rõ cấu trúc nội bộ của nó. Iterator thực hiện việc này thông qua hai phương thức chính:
__iter__()
: Trả về đối tượng iterator.__next__()
: Trả về giá trị tiếp theo trong tập hợp. Nếu không còn giá trị nào, phương thức này sẽ ném ra ngoại lệ StopIteration
.Khi bạn sử dụng một đối tượng có thể lặp (iterable) như danh sách, tuple, hoặc dictionary trong một vòng lặp for
, Python sẽ tự động tạo một iterator cho đối tượng đó và gọi các phương thức __iter__()
và __next__()
theo cách sau:
__iter__()
để lấy đối tượng iterator.__next__()
để lấy giá trị tiếp theo. Quá trình này tiếp tục cho đến khi không còn giá trị nào, lúc này StopIteration
sẽ được ném ra.Bạn có thể tạo iterator của riêng mình bằng cách định nghĩa một lớp với các phương thức __iter__()
và __next__()
. Dưới đây là một ví dụ:
class MyIterator: def __init__(self, limit): self.limit = limit self.current = 0 def __iter__(self): return self # Trả về đối tượng iterator def __next__(self): if self.current < self.limit: result = self.current self.current += 1 return result else: raise StopIteration # Khi không còn giá trị nào # Sử dụng iterator my_iter = MyIterator(5) for number in my_iter: print(number)
Kết quả:
0 1 2 3 4
__iter__()
và trả về một iterator. Ví dụ: danh sách, tuple, set, và dictionary là các iterable.__next__()
và lưu trữ trạng thái của quá trình lặp.Python cung cấp nhiều đối tượng có thể lặp sẵn, như list
, tuple
, dict
, và set
. Bạn có thể tạo một iterator từ một iterable bằng cách sử dụng hàm iter()
:
my_list = [1, 2, 3] my_iter = iter(my_list) print(next(my_iter)) # Output: 1 print(next(my_iter)) # Output: 2 print(next(my_iter)) # Output: 3 # print(next(my_iter)) # Kích hoạt StopIteration
Một cách khác để tạo iterator là sử dụng generator. Generator là một hàm đặc biệt sử dụng từ khóa yield
để trả về giá trị. Generator tự động tạo một iterator cho bạn.
def my_generator(limit): current = 0 while current < limit: yield current current += 1 # Sử dụng generator for number in my_generator(5): print(number)
Kết quả:
0 1 2 3 4
Iterator là một khái niệm quan trọng trong Python cho phép bạn duyệt qua các tập hợp giá trị một cách hiệu quả. Bằng cách hiểu và sử dụng iterator, bạn có thể viết mã sạch hơn và hiệu quả hơn trong việc xử lý các tập dữ liệu lớn mà không cần phải lưu trữ tất cả các giá trị trong bộ nhớ cùng một lúc.