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.

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:

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!

Đăng ký kênh youtube để ủng hộ Cafedev nha các bạn, Thanks you!