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
.
Cách hoạt động của Iterator
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:
- Gọi
__iter__()
để lấy đối tượng iterator.
- Gọi
__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.
Tạo Iterator
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ụ:
Ví dụ về Iterator:
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ả:
Iterable vs Iterator
- Iterable: Là một đối tượng mà bạn có thể lặp qua, thường có phương thức
__iter__()
và trả về một iterator. Ví dụ: danh sách, tuple, set, và dictionary là các iterable.
- Iterator: Là một đối tượng có thể duyệt qua các giá trị. Nó có phương thức
__next__()
và lưu trữ trạng thái của quá trình lặp.
Sử dụng Built-in Iterators
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
Generator
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.
Ví dụ về Generator:
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ả:
Kết Luận
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.