Đối tượng Iterator trong Python

Chúng tôi rất vui mừng chia sẻ kiến thức về từ khóa Iterator la gi để tối ưu hóa nội dung trang web và chiến dịch tiếp thị trực tuyến. Bài viết cung cấp phương pháp tìm kiếm, phân tích và lựa chọn từ khóa phù hợp, cùng với chiến lược và công cụ hữu ích. Hy vọng thông tin này sẽ giúp bạn xây dựng chiến lược thành công và thu hút lưu lượng người dùng. Cảm ơn sự quan tâm và hãy tiếp tục theo dõi blog để cập nhật kiến thức mới nhất.

Iterator là gì? Iterator trong Python được sử dụng ra làm sao? Hãy cùng Quantrimang.com tìm hiểu mọi điều cần hiểu rõ về cách sử dụng Iterator Python nhé!

Bạn Đang Xem: Đối tượng Iterator trong Python

Iterator là các đối tượng người tiêu dùng được chấp nhận ta lấy từng thành phần của nó, hành động này còn có thể được lặp đi tái diễn. Trong nội dung bài viết này, Quantrimang sẽ cùng các bạn sẽ tìm hiểu cách iterator hoạt động trong Python và cách bạn cũng có thể xây dựng trình lặp của riêng mình bằng các phương thức __iter__ và __next__.

Iterator trong Python là gì?

Iterator ở khắp mọi nơi trong Python, bên trong các vòng lặp, comprehension, generator…

Nó đơn giản chỉ là các đối tượng người tiêu dùng được chấp nhận ta lấy từng thành phần, bất kể khi nào bạn sử dụng vòng lặp hay các kĩ thuật để đã chiếm giá trị một nhóm thành phần ở một thời khắc nào đó.

Về mặt kỹ thuật, Iterator trong Python phải thực hiện hai phương thức nhất là __iter__() và __next__(), gọi chung là giao thức iterator (Iterator Protocol)

  • Phương thức __iter__ trả về chính đối tượng người tiêu dùng iterator. Phương thức này được yêu cầu thiết lập cho tất cả đối tượng người tiêu dùng “iterable” và iterator để sở hữu thể sử dụng các câu lệnh for và in.
  • Phương thức __next__ trả về thành phần tiếp theo. Nếu không còn thành phần nào nữa thì sẽ có được lỗi StopIteration xẩy ra.

Iterable object là một đối tượng người tiêu dùng sau khoản thời gian sử dụng các phương thức sẽ trả về một iterator, ví dụ như Chuỗi, List, Tuple.

Iter() là một hàm dựng sẵn trong Python nhận nguồn vào là một đối tượng người tiêu dùng iterable và trả về kết quả là một iterator.

# Khai bao mot list my_list = [4, 7, 0, 3] # lay mot iterator bang cach su dung iter() my_iter = iter(my_list) ## su dung next() #prints 4 print(next(my_iter)) #prints 7 print(next(my_iter)) ## next(obj) chinh la obj.__next__() #prints 0 print(my_iter.__next__()) #prints 3 print(my_iter.__next__()) ## Xay ra loi StopIteration vi het gia tri tra ve next(my_iter)

Chạy lớp học, kết quả trả về là:

4 7 0 3 Traceback (most recent call last): File “<stdinvàgt;”, line 24, in <modulevàgt; next(my_iter) StopIteration

Một cách tương tự trả về kết quả này là ta sử dụng vòng lặp for.

>>> for element in my_list: … print(element) … 4 7 0 3

Cách vòng lặp hoạt động

Xem Thêm : Vàng chân đèn là gì? Mọi điều vàng chân đèn phải biết – wowhay

Như tất cả chúng ta thấy trong ví dụ trên, vòng lặp for có thể tái diễn tự động hóa thông qua việc sử dụng list.

Trong thực tế, vòng lặp for có thể tái diễn trên bất kỳ iterable nào. Tất cả chúng ta hãy xem kỹ hơn về kiểu cách vòng lặp for được thực hiện trong Python.

for element in iterable: # do something with element

Được thực hiện tương tự như:

# iter_obj là một iterator object tạo từ iterable iter_obj = iter(iterable) # vòng lặp while True: try: # sử dụng next element = next(iter_obj) except StopIteration: # nếu xẩy ra lỗi StopIteration thì vòng lặp sẽ tiến hành break ra ngoài break

Ở ví dụ này, bên trong vòng lặp for ta tạo một iterator object tên là iter_obj bằng phương pháp gọi iter() trên iterable.

Và như bạn thấy thì vòng lặp for ở đây đấy là vòng lặp while vô hạn. Next() bên trong vòng lặp lấy ra các thành phần để thực hiện các câu lệnh ở for loop. Đến khi lấy hết các giá trị thì ngoại lệ StopIteration sẽ tiến hành sinh ra và vòng lặp kết thúc.

Xây dựng trình vòng lặp Iterator trong Python

Tất cả chúng ta có thể tự xây dựng iterator là một class. Xây dựng Iterator rất dễ dàng trong Python, tất cả chúng ta chỉ có thực hiện các phương thức __iter__() và __next__().

class PowTwo: def __init__(self, max = 0): self.max = max def __iter__(self): self.n = 0 return self def __next__(self): if self.n <= self.max: result = 2 ** self.n self.n += 1 return result else: raise StopIteration

Phương thức __iter__ sẽ làm đối tượng người tiêu dùng trở thành đối tượng người tiêu dùng iterable.

Giá trị trả về của __iter__ là một iterator. Nó cần có phương thức __next__ và trả về StopIteration nếu không còn phần thử nào nữa.

Tạo ra một iterator và chạy lớp học như sau:

>>> a = PowTwo(4) >>> i = iter(a) >>> next(i) 1 >>> next(i) 2 >>> next(i) 4 >>> next(i) 8 >>> next(i) 16 >>> next(i) Traceback (most recent call last): … StopIteration

Tất cả chúng ta cũng tồn tại thể sử dụng một vòng lặp for để lặp iterator

>>> for i in PowTwo(5): … print(i) … 1 2 4 8 16 32

Iterator lặp vô hạn trong Python

Xem Thêm : Sản phẩm dịch vụ (Services) là gì? Đặc điểm của sản phẩm dịch vụ

Không phải tất cả những đối tượng người tiêu dùng iterator đều sẽ tiến hành gọi hết các thành phần và kết thúc khi không còn thành phần. Có một số trường hợp iterator sẽ lặp vô hạn. Ví dụ như sau:

>>> int() 0 >>> inf = iter(int,1) >>> next(inf) 0 >>> next(inf) 0

Tất cả chúng ta có thể thấy rằng hàm int() luôn trả về 0. Vì vậy, việc truyền nó dưới dạng iter(int, 1) sẽ trả về một iterator lặp cho tới khi giá trị trả về bằng 1. Điều này sẽ không bao giờ xẩy ra và đây đấy là iterator lặp vô hạn. Bạn phải lưu ý khi xử lý trong các trường hợp thế này.

Ngoài ra, bạn cũng tồn tại thể tự xây dựng iterator lặp vô hạn. Ví dụ sau đây sẽ lặp vô hạn và trả về các số lẻ vì không có xét tuyển dừng nào cả.

class InfIter: def __iter__(self): self.num = 1 return self def __next__(self): num = self.num self.num += 2 return num Chạy lớp học: >>> a = iter(InfIter()) >>> next(a) 1 >>> next(a) 3 >>> next(a) 5 >>> next(a) 7

Ưu điểm của việc sử dụng Iterator lặp là chúng tiết kiệm chi phí tài nguyên. Giống như hiển thị ở trên, bạn cũng có thể nhận được tất cả những số lẻ mà không lưu trữ trên toàn bộ mạng lưới hệ thống số ở bộ nhớ.

Iterator vs Iterable

Lists, tuples, dictionaries và sets đều là những đối tượng người tiêu dùng iterable – có thể lặp. Chúng là các container có thể lặp mà bạn cũng có thể lấy một iterator bên trong.

Tất cả những đối tượng người tiêu dùng có phương thức iter() đều được sử dụng để sở hữu iterator. Ví dụ:

Trả về một iterator từ tuple và print từng giá trị:

mytuple = (“apple”, “banana”, “cherry”) myit = iter(mytuple) print(next(myit)) print(next(myit)) print(next(myit))

Thậm chí còn các chuỗi là đối tượng người tiêu dùng có thể lặp và trả về một iterator. Ví dụ:

mystr = “banana” myit = iter(mystr) print(next(myit)) print(next(myit)) print(next(myit)) print(next(myit)) print(next(myit)) print(next(myit))

StopIteration

Để tránh tái diễn mãi mãi, bạn cũng có thể dùng lệnh StopIteration. Trong phương thức _next_(), bạn cũng có thể thêm xét tuyển kết thúc để phát sinh lỗi khi việc tái diễn đạt đủ số lần nhất định. Ví 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)

Xem thêm:

  • Lập trình hướng đối tượng người tiêu dùng trong Python
  • Thừa kế (Inheritance) trong Python
  • Các kỹ thuật vòng lặp trong Python

You May Also Like

About the Author: v1000