Trình lặp lại Python
Trình lặp lại Python
Một trình lặp là một đối tượng có chứa một số giá trị có thể đếm được.
Trình lặp là một đối tượng có thể được lặp lại, có nghĩa là bạn có thể duyệt qua tất cả các giá trị.
Về mặt kỹ thuật, trong Python, một trình vòng lặp là một đối tượng thực hiện giao thức trình vòng lặp, bao gồm các phương thức __iter__()
và __next__()
.
Lặp lại so với lặp lại
Danh sách, bộ giá trị, từ điển và bộ đều là các đối tượng có thể lặp lại. Chúng là các vùng chứa có thể lặp lại mà bạn có thể lấy một trình vòng lặp.
Tất cả các đối tượng này có một iter()
phương thức được sử dụng để lấy một trình vòng lặp:
Thí dụ
Trả về một trình lặp từ một bộ tuple và in từng giá trị:
mytuple = ("apple", "banana", "cherry")
myit = iter(mytuple)
print(next(myit))
print(next(myit))
print(next(myit))
Các chuỗi thậm chí là các đối tượng có thể lặp lại và có thể trả về một trình lặp:
Thí dụ
Chuỗi cũng là các đối tượng có thể lặp lại, chứa một chuỗi các ký tự:
mystr = "banana"
myit = iter(mystr)
print(next(myit))
print(next(myit))
print(next(myit))
print(next(myit))
print(next(myit))
print(next(myit))
Looping qua một lặp lại
Chúng ta cũng có thể sử dụng một for
vòng lặp để lặp qua một đối tượng có thể lặp lại:
Thí dụ
Lặp lại các giá trị của một tuple:
mytuple = ("apple", "banana", "cherry")
for x in mytuple:
print(x)
Thí dụ
Lặp lại các ký tự của một chuỗi:
mystr = "banana"
for x in mystr:
print(x)
Vòng for
lặp thực sự tạo ra một đối tượng trình lặp và thực thi phương thức next () cho mỗi vòng lặp.
Tạo một Trình lặp lại
Để tạo một đối tượng / lớp như một trình vòng lặp, bạn phải triển khai các phương thức
__iter__()
và
__next__()
đối tượng của mình.
Như bạn đã học trong chương Lớp / Đối tượng trong Python , tất cả các lớp đều có một hàm được gọi
__init__()
, cho phép bạn thực hiện một số khởi tạo khi đối tượng đang được tạo.
Phương __iter__()
thức này hoạt động tương tự, bạn có thể thực hiện các hoạt động (khởi tạo, v.v.), nhưng phải luôn trả về chính đối tượng trình lặp.
Phương __next__()
thức này cũng cho phép bạn thực hiện các thao tác và phải trả về mục tiếp theo trong chuỗi.
Thí dụ
Tạo một trình lặp trả về các số, bắt đầu bằng 1 và mỗi chuỗi sẽ tăng thêm một (trả về 1,2,3,4,5, v.v.):
class MyNumbers:
def __iter__(self):
self.a =
1
return self
def __next__(self):
x = self.a
self.a += 1
return x
myclass = MyNumbers()
myiter = iter(myclass)
print(next(myiter))
print(next(myiter))
print(next(myiter))
print(next(myiter))
print(next(myiter))
StopIteration
Ví dụ trên sẽ tiếp tục mãi mãi nếu bạn có đủ câu lệnh next () hoặc nếu nó được sử dụng trong một
for
vòng lặp.
Để ngăn việc lặp đi lặp lại mãi mãi, chúng ta có thể sử dụng
StopIteration
câu lệnh.
Trong __next__()
phương thức này, chúng ta có thể thêm điều kiện kết thúc để tạo ra lỗi nếu việc lặp được thực hiện một số lần cụ thể:
Thí dụ
Dừng sau 20 lần lặp:
class MyNumbers:
def __iter__(self):
self.a =
1
return self
def __next__(self):
if self.a <= 20:
x = self.a
self.a += 1
return x
else:
raise StopIteration
myclass =
MyNumbers()
myiter = iter(myclass)
for x in myiter:
print(x)