Trong nhiều trường hợp, chúng ta có nhu cầu truy cập một đối tượng như một trình vòng lặp. Một cách là tạo một vòng lặp nhưng điều đó kéo dài nhiệm vụ và thời gian thực hiện của lập trình viên. Python giảm bớt nhiệm vụ này bằng cách cung cấp một phương thức tích hợp __iter __ () cho tác vụ này.
Hàm __iter __ () trả về một trình lặp cho đối tượng đã cho (array, set, tuple, etc. or custom objects). Nó tạo ra một đối tượng có thể được truy cập từng phần tử một bằng cách sử dụng hàm __next __ (), thường rất hữu ích khi xử lý các vòng lặp.
Nội dung chính
1. Cú pháp:
iter(object)
iter(callable, sentinel)
- Object: Đối tượng có trình lặp phải được tạo. Nó có thể là một đối tượng tập hợp như danh sách hoặc tuple hoặc một đối tượng do người dùng định nghĩa (sử dụng OOPS).
- Callable, Sentinel: Callable đại diện cho một đối tượng có thể gọi và sentinel là giá trị mà tại đó sự lặp lại là cần thiết để kết thúc, giá trị sentinel đại diện cho phần cuối của chuỗi được lặp lại.
Exception :
Nếu chúng ta gọi trình lặp(iterator) sau khi tất cả các phần tử đã được lặp lại, thì sẽ gặp exception này StopIterationError.
Hàm __iter __ () trả về một đối tượng trình lặp đi qua từng phần tử của đối tượng đã cho. Phần tử tiếp theo có thể được truy cập thông qua hàm __next __ (). Trong trường hợp đối tượng có thể gọi và giá trị sentinel, quá trình lặp được thực hiện cho đến khi giá trị được tìm thấy hoặc kết thúc của các phần tử. Trong mọi trường hợp, đối tượng ban đầu không được sửa đổi.
2. Ví dụ:
Code 1:
Python 3:
# Python code demonstrating
# basic use of iter()
listA = ['a','e','i','o','u']
iter_listA = iter(listA)
try:
print( next(iter_listA))
print( next(iter_listA))
print( next(iter_listA))
print( next(iter_listA))
print( next(iter_listA))
print( next(iter_listA)) #StopIteration error
except:
pass
output
a
e
i
o
u
Code 2:
Python 3:
# Python code demonstrating
# basic use of iter()
lst = [11, 22, 33, 44, 55]
iter_lst = iter(lst)
while True:
try:
print(iter_lst.__next__())
except:
break
output
11
22
33
44
55
Code 3
Python 3:
# Python code demonstrating
# basic use of iter()
listB = ['Cat', 'Bat', 'Sat', 'Mat']
iter_listB = listB.__iter__()
try:
print(iter_listB.__next__())
print(iter_listB.__next__())
print(iter_listB.__next__())
print(iter_listB.__next__())
print(iter_listB.__next__()) #StopIteration error
except:
print(" \nThrowing 'StopIterationError'",
"I cannot count more.")
output
Cat
Bat
Sat
Mat
Throwing 'StopIterationError' I cannot count more.
Code 4:User-defined objects (using OOPS)
Python 3:
# Python code showing use of iter() using OOPs
class Counter:
def __init__(self, start, end):
self.num = start
self.end = end
def __iter__(self):
return self
def __next__(self):
if self.num > self.end:
raise StopIteration
else:
self.num += 1
return self.num - 1
# Driver code
if __name__ == '__main__' :
a, b = 2, 5
c1 = Counter(a, b)
c2 = Counter(a, b)
# Way 1-to print the range without iter()
print ("Print the range without iter()")
for i in c1:
print ("Eating more Pizzas, counting ", i, end ="\n")
print ("\nPrint the range using iter()\n")
# Way 2- using iter()
obj = iter(c2)
try:
while True: # Print till error raised
print ("Eating more Pizzas, counting ", next(obj))
except:
# when StopIteration raised, Print custom message
print ("\nDead on overfood, GAME OVER")
output
Print the range without iter()
Eating more Pizzas, counting 2
Eating more Pizzas, counting 3
Eating more Pizzas, counting 4
Eating more Pizzas, counting 5
Print the range using iter()
Eating more Pizzas, counting 2
Eating more Pizzas, counting 3
Eating more Pizzas, counting 4
Eating more Pizzas, counting 5
Dead on overfood, GAME OVER
Cài ứng dụng cafedev để dễ dàng cập nhật tin và học lập trình mọi lúc mọi nơi tại đây.
Nguồn và Tài liệu tiếng anh tham khảo:
Tài liệu từ cafedev:
- Full series tự học Python từ cơ bản tới nâng cao tại đây nha.
- Tự học ML bằng Python từ cơ bản tới nâng cao.
- Các nguồn kiến thức MIỄN PHÍ VÔ GIÁ từ cafedev tại đây
Nếu bạn thấy hay và hữu ích, bạn có thể tham gia các kênh sau của cafedev để nhận được nhiều hơn nữa:
Chào thân ái và quyết thắng!