Bài 18 - Python Iterators
Bài 18 - Python Iterators
1. Iterator Là Gì?
- Định nghĩa: Iterator là đối tượng cho phép duyệt qua từng phần tử trong tập hợp (list, tuple, dict,...) một cách tuần tự.
- Đặc điểm:
- Trả lần lượt từng phần tử khi được yêu cầu
- Không cần tải toàn bộ dữ liệu vào bộ nhớ cùng lúc
- Hiệu quả với dữ liệu lớn hoặc nguồn dữ liệu vô hạn
2. Cơ Chế Hoạt Động
Iterator hoạt động dựa trên 2 phương thức:
__iter__()
: Trả về bản thân iterator__next__()
: Trả về phần tử kế tiếp
python
my_list = [1, 2, 3] my_iter = iter(my_list) # Tạo iterator từ list print(next(my_iter)) # 1 print(next(my_iter)) # 2 print(next(my_iter)) # 3 print(next(my_iter)) # ❌ StopIteration
3. Tạo Iterator Tùy Chỉnh
Ví dụ: Iterator tạo số chẵn
python
class EvenNumbers: def __init__(self, max): self.max = max self.num = 0 def __iter__(self): return self def __next__(self): if self.num <= self.max: result = self.num self.num += 2 return result else: raise StopIteration # Kết thúc iteration # Sử dụng even_iter = EvenNumbers(10) for num in even_iter: print(num, end=' ') # Output: 0 2 4 6 8 10
4. Iterator vs. Iterable
Đặc điểm | Iterable | Iterator |
---|---|---|
Khả năng | Có thể duyệt | Thực hiện duyệt |
Phương thức | Có __iter__() | Có __iter__() và __next__() |
Ví dụ | List, Tuple, Dict | Kết quả từ iter() |
Bộ nhớ | Lưu toàn bộ dữ liệu | Chỉ lưu trạng thái hiện tại |
Chuyển đổi:
python
my_list = [1, 2, 3] # Iterable my_iter = iter(my_list) # Chuyển thành Iterator
5. Xử Lý StopIteration
Khi hết phần tử, iterator gây lỗi StopIteration
. Cách xử lý:
python
fruits = ["apple", "banana", "cherry"] fruit_iter = iter(fruits) while True: try: print(next(fruit_iter)) except StopIteration: print("End of iteration") break # Output: apple → banana → cherry → End of iteration
6. Ưu Điểm Của Iterator
- Tiết kiệm bộ nhớ: Chỉ xử lý từng phần tử
Làm việc với dữ liệu vô hạn:
python
class InfiniteCounter: def __iter__(self): self.num = 0 return self def __next__(self): num = self.num self.num += 1 return num # Sử dụng: counter = iter(InfiniteCounter()) print(next(counter)) # 0 print(next(counter)) # 1 (không giới hạn)
- Tương thích với cấu trúc Python: for-loop, generator expressions
7. Bài Tập Thực Hành
Câu 1: Tạo iterator đếm ngược
python
class CountDown: def __init__(self, start): self.current = start def __iter__(self): return self def __next__(self): if self.current < 0: raise StopIteration else: num = self.current self.current -= 1 return num # Test for num in CountDown(5): print(num, end=' ') # Output: 5 4 3 2 1 0
Câu 2: Chuyển iterator thành list
python
my_iter = iter([10, 20, 30]) list_from_iter = list(my_iter) # [10, 20, 30]
8. Tài Nguyên Học Tập
Iterator là nền tảng cho generator và xử lý dữ liệu lớn trong Python! 🚀
Back to the course
Python cơ bản dành cho người mới bắt đầu