Tererators in Python
Tererators ở khắp mọi nơi trong Python. Chúng được thực hiện một cách tao nhã trong các vòng lặp
4 7 0 3 Traceback [most recent call last]: File "", line 24, in next[my_iter] StopIteration1, toàn bộ, máy phát điện, v.v. nhưng được ẩn trong tầm nhìn rõ ràng.
Iterator in Python chỉ đơn giản là một đối tượng có thể được lặp lại. Một đối tượng sẽ trả về dữ liệu, một phần tử tại một thời điểm.
Về mặt kỹ thuật, một đối tượng iterator Python phải thực hiện hai phương pháp đặc biệt,
4 7 0 3 Traceback [most recent call last]: File "", line 24, in next[my_iter] StopIteration2 và
4 7 0 3 Traceback [most recent call last]: File "", line 24, in next[my_iter] StopIteration3, gọi chung là giao thức Iterator.iterator object must implement two special methods,
4 7 0 3 Traceback [most recent call last]: File "", line 24, in next[my_iter] StopIteration2 and
4 7 0 3 Traceback [most recent call last]: File "", line 24, in next[my_iter] StopIteration3, collectively called the iterator protocol.
Một đối tượng được gọi là ITable nếu chúng ta có thể nhận được một trình lặp từ nó. Hầu hết các thùng chứa tích hợp trong Python như: list, tuple, chuỗi, vv là lặp đi lặp lại.iterable if we can get an iterator from it. Most built-in containers in Python like: list, tuple, string etc. are iterables.
Hàm
4 7 0 3 Traceback [most recent call last]: File "", line 24, in next[my_iter] StopIteration4 [lần lượt gọi phương thức
4 7 0 3 Traceback [most recent call last]: File "", line 24, in next[my_iter] StopIteration2] trả về trình lặp từ chúng.
Lặp lại thông qua một trình lặp
Chúng tôi sử dụng chức năng
4 7 0 3 Traceback [most recent call last]: File "", line 24, in next[my_iter] StopIteration6 để lặp thủ công tất cả các mục của trình lặp. Khi chúng tôi đạt đến kết thúc và không còn dữ liệu nào được trả về, nó sẽ tăng ngoại lệ
4 7 0 3 Traceback [most recent call last]: File "", line 24, in next[my_iter] StopIteration7. Sau đây là một ví dụ.
# define a list
my_list = [4, 7, 0, 3]
# get an iterator using iter[]
my_iter = iter[my_list]
# iterate through it using next[]
# Output: 4
print[next[my_iter]]
# Output: 7
print[next[my_iter]]
# next[obj] is same as obj.__next__[]
# Output: 0
print[my_iter.__next__[]]
# Output: 3
print[my_iter.__next__[]]
# This will raise error, no items left
next[my_iter]
Đầu ra
4 7 0 3 Traceback [most recent call last]: File "", line 24, in next[my_iter] StopIteration
Một cách thanh lịch hơn để tự động lặp lại là bằng cách sử dụng vòng lặp cho. Sử dụng điều này, chúng tôi có thể lặp lại bất kỳ đối tượng nào có thể trả về trình lặp, ví dụ như danh sách, chuỗi, tệp, v.v.
>>> for element in my_list:
... print[element]
...
4
7
0
3
Làm việc cho vòng lặp cho các trình lặp lại
Như chúng ta thấy trong ví dụ trên, vòng lặp
4 7 0 3 Traceback [most recent call last]: File "", line 24, in next[my_iter] StopIteration1 có thể tự động lặp qua danh sách.
Trong thực tế, vòng lặp
4 7 0 3 Traceback [most recent call last]: File "", line 24, in next[my_iter] StopIteration1 có thể lặp lại trên bất kỳ điều đó. Chúng ta hãy xem xét kỹ hơn về cách vòng lặp
4 7 0 3 Traceback [most recent call last]: File "", line 24, in next[my_iter] StopIteration1 thực sự được triển khai trong Python.
for element in iterable:
# do something with element
Thực sự được thực hiện như.
# create an iterator object from that iterable
iter_obj = iter[iterable]
# infinite loop
while True:
try:
# get the next item
element = next[iter_obj]
# do something with element
except StopIteration:
# if StopIteration is raised, break from loop
break
Vì vậy, bên trong, vòng lặp
4 7 0 3 Traceback [most recent call last]: File "", line 24, in next[my_iter] StopIteration1 tạo ra một đối tượng iterator,
>>> for element in my_list:
... print[element]
...
4
7
0
3
2 bằng cách gọi 4 7 0 3 Traceback [most recent call last]: File "", line 24, in next[my_iter] StopIteration4 trên Itable.
Trớ trêu thay, vòng lặp
4 7 0 3 Traceback [most recent call last]: File "", line 24, in next[my_iter] StopIteration1 này thực sự là một vòng vô hạn trong khi vòng lặp.
Bên trong vòng lặp, nó gọi
4 7 0 3 Traceback [most recent call last]: File "", line 24, in next[my_iter] StopIteration6 để có được phần tử tiếp theo và thực hiện phần thân của vòng lặp
4 7 0 3 Traceback [most recent call last]: File "", line 24, in next[my_iter] StopIteration1 với giá trị này. Sau khi tất cả các vật phẩm xả,
4 7 0 3 Traceback [most recent call last]: File "", line 24, in next[my_iter] StopIteration7 được nâng lên trong nội bộ và các vòng lặp kết thúc. Lưu ý rằng bất kỳ loại ngoại lệ nào khác sẽ đi qua.
Xây dựng trình lặp tùy chỉnh
Xây dựng một trình lặp từ đầu rất dễ dàng trong Python. Chúng tôi chỉ phải thực hiện các phương pháp
4 7 0 3 Traceback [most recent call last]: File "", line 24, in next[my_iter] StopIteration2 và
4 7 0 3 Traceback [most recent call last]: File "", line 24, in next[my_iter] StopIteration3.
Phương thức
4 7 0 3 Traceback [most recent call last]: File "", line 24, in next[my_iter] StopIteration2 trả về chính đối tượng Iterator. Nếu được yêu cầu, một số khởi tạo có thể được thực hiện.
Phương thức
4 7 0 3 Traceback [most recent call last]: File "", line 24, in next[my_iter] StopIteration3 phải trả về mục tiếp theo trong chuỗi. Khi đạt đến kết thúc, và trong các cuộc gọi tiếp theo, nó phải tăng
4 7 0 3 Traceback [most recent call last]: File "", line 24, in next[my_iter] StopIteration7.
Ở đây, chúng tôi trình bày một ví dụ sẽ cho chúng tôi sức mạnh tiếp theo của 2 trong mỗi lần lặp. Điện tử bắt đầu từ số 0 lên đến số người dùng.
Nếu bạn không có bất kỳ ý tưởng nào về lập trình hướng đối tượng, hãy truy cập & nbsp; lập trình hướng đối tượng Python.
class PowTwo:
"""Class to implement an iterator
of powers of two"""
def __init__[self, max=0]:
self.max = max
def __iter__[self]:
self.n = 0
return self
def __next__[self]:
if self.n >> for i in PowTwo[5]:
... print[i]
...
1
2
4
8
16
32
Làm việc cho vòng lặp cho các trình lặp lại
Như chúng ta thấy trong ví dụ trên, vòng lặp
4 7 0 3 Traceback [most recent call last]: File "", line 24, in next[my_iter] StopIteration1 có thể tự động lặp qua danh sách.
Trong thực tế, vòng lặp
4 7 0 3 Traceback [most recent call last]: File "", line 24, in next[my_iter] StopIteration1 có thể lặp lại trên bất kỳ điều đó. Chúng ta hãy xem xét kỹ hơn về cách vòng lặp
4 7 0 3 Traceback [most recent call last]: File "", line 24, in next[my_iter] StopIteration1 thực sự được triển khai trong Python.
Thực sự được thực hiện như.
>>> int[]
0
>>> inf = iter[int,1]
>>> next[inf]
0
>>> next[inf]
0
Vì vậy, bên trong, vòng lặp
4 7 0 3 Traceback [most recent call last]: File "", line 24, in next[my_iter] StopIteration1 tạo ra một đối tượng iterator,
>>> for element in my_list:
... print[element]
...
4
7
0
3
2 bằng cách gọi 4 7 0 3 Traceback [most recent call last]: File "", line 24, in next[my_iter] StopIteration4 trên Itable.
Trớ trêu thay, vòng lặp
4 7 0 3 Traceback [most recent call last]: File "", line 24, in next[my_iter] StopIteration1 này thực sự là một vòng vô hạn trong khi vòng lặp.
class InfIter:
"""Infinite iterator to return all
odd numbers"""
def __iter__[self]:
self.num = 1
return self
def __next__[self]:
num = self.num
self.num += 2
return num
Bên trong vòng lặp, nó gọi
4 7 0 3 Traceback [most recent call last]: File "", line 24, in next[my_iter] StopIteration6 để có được phần tử tiếp theo và thực hiện phần thân của vòng lặp
4 7 0 3 Traceback [most recent call last]: File "", line 24, in next[my_iter] StopIteration1 với giá trị này. Sau khi tất cả các vật phẩm xả,
4 7 0 3 Traceback [most recent call last]: File "", line 24, in next[my_iter] StopIteration7 được nâng lên trong nội bộ và các vòng lặp kết thúc. Lưu ý rằng bất kỳ loại ngoại lệ nào khác sẽ đi qua.
4 7 0 3 Traceback [most recent call last]: File "", line 24, in next[my_iter] StopIteration0
Xây dựng trình lặp tùy chỉnh
Xây dựng một trình lặp từ đầu rất dễ dàng trong Python. Chúng tôi chỉ phải thực hiện các phương pháp
4 7 0 3 Traceback [most recent call last]: File "", line 24, in next[my_iter] StopIteration2 và
4 7 0 3 Traceback [most recent call last]: File "", line 24, in next[my_iter] StopIteration3.
Phương thức
4 7 0 3 Traceback [most recent call last]: File "", line 24, in next[my_iter] StopIteration2 trả về chính đối tượng Iterator. Nếu được yêu cầu, một số khởi tạo có thể được thực hiện.
Phương thức
4 7 0 3 Traceback [most recent call last]: File "", line 24, in next[my_iter] StopIteration3 phải trả về mục tiếp theo trong chuỗi. Khi đạt đến kết thúc, và trong các cuộc gọi tiếp theo, nó phải tăng
4 7 0 3 Traceback [most recent call last]: File "", line 24, in next[my_iter] StopIteration7.