Trong Python có khái niệm iteration (lặp) trên các container. Iterator có hai phương thức riêng biệt. Sử dụng các hàm này, ta có thể dùng lớp do người dùng định nghĩa để hỗ trợ iteration. Các hàm là __iter__() và __next__().
Phương thức __iter__()
Phương thức __iter__() trả về đối tượng iterator. Nếu một lớp hỗ trợ nhiều loại iteration, có thể có các phương thức khác để làm nhiệm vụ khác.
Phương thức __next__()
Phương thức __next__() trả về phần tử tiếp theo từ container. Khi hết phần tử, nó ném ngoại lệ StopIteration.
Ví dụ mã
class PowerIter:
# Trả về x ^ x với x trong range 1 đến max
def __init__(self, max=0):
self.max = max # Giới hạn max của iterator
def __iter__(self):
self.term = 0
return self
def __next__(self):
if self.term <= self.max:
element = self.term ** self.term
self.term += 1
return element
else:
raise StopIteration # Khi vượt quá max, ném exception
powIterObj = PowerIter(10)
powIter = iter(powIterObj)
for i in range(10):
print(next(powIter))
Kết quả
1 1 4 27 256 3125 46656 823543 16777216 387420489