Python: Python Iterator
Iterator là một đối tượng đơn giản, nó có thể được lặp lại đến giới hạn nhất định hoặc lặp không có giới hạn. Nó có thể cho phép người dùng truy cập hoặc duyệt qua tất cả các mục được thu thập mà không cần bất kỳ kiến thức nào trước đó.
Python Iterator đã được triển khai bằng cách sử dụng công cụ trình lặp, nó bao gồm hai phương thức là __iter__() và __next__().
1. __iter__(): Phương thức này trả về một đối tượng trình lặp.
2. __next__(): Phương thức này trả về phần tử tiếp theo trong chuỗi của một đối tượng
Trước khi thảo luận về các phương thức này, chúng ta sẽ tìm hiểu ít nhiều về cách thức lặp tiêu chuẩn.
LẤY VÍ DỤ VÒNG LẶP FOR
Ở đây chúng ta xét một danh sách các phần tử kiểu int:
data = [1, 2, 3, 4, 5] for i in data: print("i is:", i)
Kết quả:
1
2
3
4
5
Bây giờ chúng ta có thể tìm hiểu kỹ lưỡng xem những gì đã xảy ra:
- Khi chúng ta làm việc với các vòng lặp nội bộ, nó sẽ sử dụng các phương thức __iter__() và __next__(), ở đây __iter__() sẽ lặp lại từng mục một và __next__() sẽ in các mục tiếp theo được thu thập.
Bây giờ bên dưới chúng ta sẽ trình bày cách sử dụng iter và next.
>>> data=[1,2,3,4,5]
>>> d_obj=iter(data)
>>> next(d_obj)
1
>>> next(d_obj)
2
>>> next(d_obj)
3
>>> next(d_obj)
4
>>> next(d_obj)
5
>>> next(d_obj)
Traceback (most recent call last):
File “<stdin>”, line 1, in <module>
StopIteration
>>>
DƯỚI ĐÂY LÀ BIỂU DIỄN SƠ ĐỒ CỦA VÍ DỤ TRÊN:
TRIỂN KHAI ITERATOR DO NGƯỜI DÙNG ĐỊNH NGHĨA
Ở đây, chúng ta sẽ tạo iterartor do ta định nghĩa với sự trợ giúp của các phương thức __next__() và __iter__().
Ví dụ:
class OwnIterator: # User defined implementation for Own Iterator def __init__(self, num=0): self.number = num def __iter__(self): self.x = 1 return self def __next__(self): if self.x <= self.number: own_iterator = self.x self.x += 1 return own_iterator else: raise StopIteration for x in OwnIterator(10): print("Num is:", x)
Kết quả:
Num is: 1
Num is: 2
Num is: 3
Num is: 4
Num is: 5
Num is: 6
Num is: 7
Num is: 8
Num is: 9
Num is: 10
TRIỂN KHAI TRÌNH LẶP VÔ HẠN DO NGƯỜI DÙNG ĐỊNH NGHĨA
class OwnIterator: # Class to implement iterator protocol def __init__(self, num=0): self.num = num def __iter__(self): self.x = 1 return self def __next__(self): own_iterator = self.x self.x += 1 return own_iterator for x in OwnIterator(): if x < 5: print("Num is:", x) else: break
Kết quả:
Num is: 1
Num is: 2
Num is: 3
Num is: 4