Iterable là một đối tượng, mà người ta có thể lặp đi lặp lại. Nó tạo ra một Iterator khi được chuyển đến phương thức iter[]. Trình vòng lặp là một đối tượng, được sử dụng để lặp qua một đối tượng có thể lặp lại bằng phương thức __next__[]. Trình lặp có phương thức __next__[], trả về mục tiếp theo của đối tượng
Ghi chú. Mỗi iterator cũng là một iterable, nhưng không phải iterable nào cũng là iterator trong Python
Ví dụ: một danh sách có thể lặp lại nhưng một danh sách không phải là một trình vòng lặp. Một iterator có thể được tạo từ một iterable bằng cách sử dụng hàm iter[]. Để làm được điều này, lớp của một đối tượng cần có phương thức __iter__, phương thức này trả về một trình vòng lặp hoặc phương thức __getitem__ với các chỉ mục tuần tự bắt đầu bằng 0.
ví dụ 1.
Chúng tôi biết rằng str có thể lặp lại nhưng nó không phải là trình lặp. trong đó nếu chúng ta chạy cái này trong vòng lặp for để in chuỗi thì điều đó là có thể bởi vì khi vòng lặp for thực thi, nó sẽ chuyển đổi thành một trình vòng lặp để thực thi mã
Python3
# code
next
[
"GFG"
]
đầu ra
Traceback [most recent call last]: File "/home/1c9622166e9c268c0d67cd9ba2177142.py", line 2, in next["GFG"] TypeError: 'str' object is not an iterator
Ở đây iter[ ] đang chuyển đổi s là một chuỗi [có thể lặp lại] thành một iterator và in G lần đầu tiên chúng ta có thể gọi nhiều lần để lặp qua các chuỗi
Khi một vòng lặp for được thực thi, câu lệnh for gọi iter[] trên đối tượng mà nó được cho là sẽ lặp lại.
Nếu cuộc gọi này thành công, cuộc gọi iter sẽ trả về một đối tượng iterator xác định phương thức __next__[], truy cập lần lượt từng phần tử của đối tượng.
Python3
# code
G F G0
G F G1
"GFG"
G F G0
G F G1
G F G5
G F G6
G F G7
G F G6
G F G7
[
next
Berlin Vienna Zurich2
G F G7
[
next
Berlin Vienna Zurich2
G F G7
[
next
Berlin Vienna Zurich2
đầu ra
G F G
Phương thức __next__[] sẽ đưa ra một ngoại lệ StopIteration nếu không còn phần tử nào khả dụng.
Vòng lặp for sẽ kết thúc ngay khi nó bắt gặp ngoại lệ StopIteration.
Hãy gọi phương thức __next__[] bằng hàm tích hợp next[].
ví dụ 2
Chức năng 'có thể lặp lại' sẽ trả về True nếu đối tượng 'obj' là có thể lặp lại và Sai nếu không.
Python3
34 is iterable : False [4, 5] is iterable : True [4, 5] is iterable : True {'a': 4} is iterable : True dfsdf is iterable : True 4.5 is iterable : False1
34 is iterable : False [4, 5] is iterable : True [4, 5] is iterable : True {'a': 4} is iterable : True dfsdf is iterable : True 4.5 is iterable : False2_______1_______1
34 is iterable : False [4, 5] is iterable : True [4, 5] is iterable : True {'a': 4} is iterable : True dfsdf is iterable : True 4.5 is iterable : False4
34 is iterable : False [4, 5] is iterable : True [4, 5] is iterable : True {'a': 4} is iterable : True dfsdf is iterable : True 4.5 is iterable : False5
34 is iterable : False [4, 5] is iterable : True [4, 5] is iterable : True {'a': 4} is iterable : True dfsdf is iterable : True 4.5 is iterable : False6
34 is iterable : False [4, 5] is iterable : True [4, 5] is iterable : True {'a': 4} is iterable : True dfsdf is iterable : True 4.5 is iterable : False7
34 is iterable : False [4, 5] is iterable : True [4, 5] is iterable : True {'a': 4} is iterable : True dfsdf is iterable : True 4.5 is iterable : False6
34 is iterable : False [4, 5] is iterable : True [4, 5] is iterable : True {'a': 4} is iterable : True dfsdf is iterable : True 4.5 is iterable : False9
# code
0
# code
1
# code
2
G F G1
G F G5
# code
5
G F G7
[
next
35_______9G F G7
[
next
35_______9G F G7
[
next
35_______9đầu ra
Berlin Vienna Zurich
Ghi chú. Nếu ‘next[iterator_obj]’ được gọi thêm một lần nữa, nó sẽ trả về ‘StopIteration’.
Ví dụ3
Kiểm tra đối tượng có thể lặp lại hay không
Python3
next
8
next
9
[
0 [
1
[
2_______37_______3[
4
[
5
G F G5
[
7[
5[
9 "GFG"
0
[
2_______38_______2 "GFG"
3
[
5[
9 "GFG"
6
"GFG"
7
"GFG"
8 "GFG"
9]
0
34 is iterable : False [4, 5] is iterable : True [4, 5] is iterable : True {'a': 4} is iterable : True dfsdf is iterable : True 4.5 is iterable : False4
]
2]
3]
434 is iterable : False [4, 5] is iterable : True [4, 5] is iterable : True {'a': 4} is iterable : True dfsdf is iterable : True 4.5 is iterable : False6
]
6]
7]
434 is iterable : False [4, 5] is iterable : True [4, 5] is iterable : True {'a': 4} is iterable : True dfsdf is iterable : True 4.5 is iterable : False6
]
6# code
1