Đối tượng python nào có thể lặp lại?

Một trình lặp là một đối tượng có trạng thái. Nó ghi nhớ vị trí của nó trong một lần lặp lại. Để đủ điều kiện là một trình vòng lặp, một đối tượng phải triển khai phương thức 
course = Course()
0 để lấy giá trị tiếp theo trong quy trình lặp

Trong Python, một đối tượng có thể lặp lại là bất kỳ đối tượng nào có khả năng trả về từng thành viên của nó, cho phép nó được lặp lại trong một vòng lặp. Ví dụ: chuỗi và danh sách có thể lặp lại

Bài đăng ngắn này chỉ cho bạn hai cách khác nhau để kiểm tra xem một đối tượng đã cho có thể lặp lại được trong Python 3 hay không. quảng cáo

Sử dụng Duck Test (xem Duck Typing – Wikipedia)

Thí dụ

# Create a function for reusable purpose
def is_iterable(object):
    try:
        iter(object)
        return True 
    except TypeError:
        return False

# Use the function
a = 'KindaCode.com'
print(is_iterable(a))

b = 1234
print(is_iterable(b))

c = {
    "k1": 10,
     "k2": 3,
     "k3": 9
}
print(is_iterable(c))

đầu ra

True
False
True

Sử dụng chức năng thể hiện (không được khuyến nghị)

Thí dụ

from collections.abc import Iterable

a = 'KindaCode.com'
print(isinstance(a, Iterable))

b = [1, 2, 3]
print(isinstance(b, Iterable))

đầu ra. quảng cáo

True
True

đọc thêm

Bạn cũng có thể xem trang danh mục Máy học hoặc trang danh mục Python của chúng tôi để biết thêm hướng dẫn và ví dụ

Trình vòng lặp ở khắp mọi nơi trong Python. Chúng được triển khai 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)
StopIteration
1, khả năng hiểu, trình tạo, v.v. nhưng được ẩn trong tầm nhìn rõ ràng

Iterator trong Python đơn giản là một đối tượng có thể được lặp đi lặp lại. Một đối tượng sẽ trả về dữ liệu, mỗi lần một phần tử

Về mặt kỹ thuật, một đối tượng trình lặp Python phải triển khai hai phương thức đặc biệt,

4
7
0
3
Traceback (most recent call last):
  File "", line 24, in 
    next(my_iter)
StopIteration
2 và
4
7
0
3
Traceback (most recent call last):
  File "", line 24, in 
    next(my_iter)
StopIteration
3, được gọi chung là giao thức trình lặp

Một đối tượng được gọi là iterable nếu chúng ta có thể lấy một iterator từ nó. Hầu hết các vùng chứa tích hợp sẵn trong Python như. danh sách, bộ dữ liệu, chuỗi, v.v. là iterables

Hàm

4
7
0
3
Traceback (most recent call last):
  File "", line 24, in 
    next(my_iter)
StopIteration
4 (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)
StopIteration
2) trả về một trình vòng lặp từ chúng


Lặp lại thông qua một Iterator

Chúng tôi sử dụng hàm

4
7
0
3
Traceback (most recent call last):
  File "", line 24, in 
    next(my_iter)
StopIteration
6 để lặp lại thủ công qua tất cả các mục của trình vòng lặp. Khi chúng tôi 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)
StopIteration
7. Sau đây là một ví dụ

# Create a function for reusable purpose
def is_iterable(object):
    try:
        iter(object)
        return True 
    except TypeError:
        return False

# Use the function
a = 'KindaCode.com'
print(is_iterable(a))

b = 1234
print(is_iterable(b))

c = {
    "k1": 10,
     "k2": 3,
     "k3": 9
}
print(is_iterable(c))
2

đầu ra

4
7
0
3
Traceback (most recent call last):
  File "", line 24, in 
    next(my_iter)
StopIteration

Một cách tao nhã hơn để tự động lặp lại là sử dụng vòng lặp for. Sử dụng điều này, chúng ta có thể lặp qua bất kỳ đối tượng nào có thể trả về một trình vòng lặp, ví dụ: danh sách, chuỗi, tệp, v.v.

# Create a function for reusable purpose
def is_iterable(object):
    try:
        iter(object)
        return True 
    except TypeError:
        return False

# Use the function
a = 'KindaCode.com'
print(is_iterable(a))

b = 1234
print(is_iterable(b))

c = {
    "k1": 10,
     "k2": 3,
     "k3": 9
}
print(is_iterable(c))
4

Hoạt động của vòng lặp for cho Iterators

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)
StopIteration
1 có thể lặp tự động qua danh sách

Trên thực tế, vòng lặp

4
7
0
3
Traceback (most recent call last):
  File "", line 24, in 
    next(my_iter)
StopIteration
1 có thể lặp qua bất kỳ lần lặp nào. Chúng ta hãy xem xét kỹ hơn cách vòng lặp
4
7
0
3
Traceback (most recent call last):
  File "", line 24, in 
    next(my_iter)
StopIteration
1 thực sự được triển khai trong Python

# Create a function for reusable purpose
def is_iterable(object):
    try:
        iter(object)
        return True 
    except TypeError:
        return False

# Use the function
a = 'KindaCode.com'
print(is_iterable(a))

b = 1234
print(is_iterable(b))

c = {
    "k1": 10,
     "k2": 3,
     "k3": 9
}
print(is_iterable(c))
8

thực sự được thực hiện như

# Create a function for reusable purpose
def is_iterable(object):
    try:
        iter(object)
        return True 
    except TypeError:
        return False

# Use the function
a = 'KindaCode.com'
print(is_iterable(a))

b = 1234
print(is_iterable(b))

c = {
    "k1": 10,
     "k2": 3,
     "k3": 9
}
print(is_iterable(c))
9

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)
StopIteration
1 tạo một đối tượng iterator,
# Create a function for reusable purpose
def is_iterable(object):
    try:
        iter(object)
        return True 
    except TypeError:
        return False

# Use the function
a = 'KindaCode.com'
print(is_iterable(a))

b = 1234
print(is_iterable(b))

c = {
    "k1": 10,
     "k2": 3,
     "k3": 9
}
print(is_iterable(c))
42 bằng cách gọi
4
7
0
3
Traceback (most recent call last):
  File "", line 24, in 
    next(my_iter)
StopIteration
4 trên iterable

Trớ trêu thay, vòng lặp

4
7
0
3
Traceback (most recent call last):
  File "", line 24, in 
    next(my_iter)
StopIteration
1 này thực sự là một vòng lặp while vô hạn

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)
StopIteration
6 để lấy phần tử tiếp theo và thực thi 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)
StopIteration
1 với giá trị này. Sau khi tất cả các vật phẩm cạn kiệt,
4
7
0
3
Traceback (most recent call last):
  File "", line 24, in 
    next(my_iter)
StopIteration
7 được nâng lên được bắt bên trong và 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 vòng lặp tùy chỉnh

Dễ dàng xây dựng một trình vòng lặp từ đầu bằng Python. Chúng ta chỉ cần triển khai các phương thức

4
7
0
3
Traceback (most recent call last):
  File "", line 24, in 
    next(my_iter)
StopIteration
2 và
4
7
0
3
Traceback (most recent call last):
  File "", line 24, in 
    next(my_iter)
StopIteration
3

Phương thức

4
7
0
3
Traceback (most recent call last):
  File "", line 24, in 
    next(my_iter)
StopIteration
2 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)
StopIteration
3 phải trả về mục tiếp theo trong chuỗi. Khi 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)
StopIteration
7

Ở đây, chúng tôi hiển thị một ví dụ sẽ cung cấp cho chúng tôi sức mạnh tiếp theo của 2 trong mỗi lần lặp lại. Số mũ lũy thừa bắt đầu từ 0 đến số do người dùng đặt

Nếu bạn không biết gì về lập trình hướng đối tượng, hãy truy cập Lập trình hướng đối tượng Python

from collections.abc import Iterable

a = 'KindaCode.com'
print(isinstance(a, Iterable))

b = [1, 2, 3]
print(isinstance(b, Iterable))
2

đầu ra

from collections.abc import Iterable

a = 'KindaCode.com'
print(isinstance(a, Iterable))

b = [1, 2, 3]
print(isinstance(b, Iterable))
3

Chúng ta cũng có thể sử dụng vòng lặp

4
7
0
3
Traceback (most recent call last):
  File "", line 24, in 
    next(my_iter)
StopIteration
1 để lặp qua lớp iterator của mình

from collections.abc import Iterable

a = 'KindaCode.com'
print(isinstance(a, Iterable))

b = [1, 2, 3]
print(isinstance(b, Iterable))
5

Python Infinite Iterators

Không nhất thiết phải sử dụng hết mục trong đối tượng lặp. Có thể có các trình vòng lặp vô hạn (không bao giờ kết thúc). Chúng ta phải cẩn thận khi xử lý các vòng lặp như vậy

Đây là một ví dụ đơn giản để chứng minh các trình vòng lặp vô hạn

Có thể gọi hàm dựng sẵn

4
7
0
3
Traceback (most recent call last):
  File "", line 24, in 
    next(my_iter)
StopIteration
4 bằng hai đối số trong đó đối số đầu tiên phải là đối tượng (hàm) có thể gọi được và đối số thứ hai là trọng điểm. Trình vòng lặp gọi hàm này cho đến khi giá trị trả về bằng với trọng điểm

from collections.abc import Iterable

a = 'KindaCode.com'
print(isinstance(a, Iterable))

b = [1, 2, 3]
print(isinstance(b, Iterable))
7

Chúng ta có thể thấy rằng hàm

# Create a function for reusable purpose
def is_iterable(object):
    try:
        iter(object)
        return True 
    except TypeError:
        return False

# Use the function
a = 'KindaCode.com'
print(is_iterable(a))

b = 1234
print(is_iterable(b))

c = {
    "k1": 10,
     "k2": 3,
     "k3": 9
}
print(is_iterable(c))
85 luôn trả về 0. Vì vậy, chuyển nó dưới dạng
# Create a function for reusable purpose
def is_iterable(object):
    try:
        iter(object)
        return True 
    except TypeError:
        return False

# Use the function
a = 'KindaCode.com'
print(is_iterable(a))

b = 1234
print(is_iterable(b))

c = {
    "k1": 10,
     "k2": 3,
     "k3": 9
}
print(is_iterable(c))
86 sẽ trả về một trình vòng lặp gọi
# Create a function for reusable purpose
def is_iterable(object):
    try:
        iter(object)
        return True 
    except TypeError:
        return False

# Use the function
a = 'KindaCode.com'
print(is_iterable(a))

b = 1234
print(is_iterable(b))

c = {
    "k1": 10,
     "k2": 3,
     "k3": 9
}
print(is_iterable(c))
85 cho đến khi giá trị trả về bằng 1. Điều này không bao giờ xảy ra và chúng ta có một trình vòng lặp vô hạn

Chúng ta cũng có thể xây dựng các trình vòng lặp vô hạn của riêng mình. Về mặt lý thuyết, iterator sau đây sẽ trả về tất cả các số lẻ

True
True
1

Một lần chạy mẫu sẽ như sau

4
7
0
3
Traceback (most recent call last):
  File "", line 24, in 
    next(my_iter)
StopIteration
0

Và như thế

Hãy cẩn thận bao gồm một điều kiện kết thúc, khi lặp qua các loại trình vòng lặp vô hạn này

Ưu điểm của việc sử dụng iterators là chúng tiết kiệm tài nguyên. Như đã trình bày ở trên, chúng ta có thể nhận được tất cả các số lẻ mà không cần lưu trữ toàn bộ hệ thống số trong bộ nhớ. Chúng ta có thể có các mục vô hạn (về mặt lý thuyết) trong bộ nhớ hữu hạn

Có một cách dễ dàng hơn để tạo các trình vòng lặp trong Python. Để tìm hiểu thêm, hãy truy cập. Trình tạo Python sử dụng năng suất

Những đối tượng nào không thể lặp lại trong Python?

Để một đối tượng có thể lặp lại trong Python, đối tượng đó phải chứa một giá trị. Do đó, việc cố gắng lặp lại một giá trị Không có sẽ làm tăng Python TypeError. Không có loại đối tượng là ngoại lệ không thể lặp lại. Một số nguồn phổ biến nhất của giá trị Không có là. Gọi hàm không trả về gì .

Các lớp Python nào có thể lặp lại?

Iterable là bất kỳ đối tượng Python nào có khả năng trả về từng thành viên của nó tại một thời điểm, cho phép nó được lặp lại trong một vòng lặp for. Các ví dụ quen thuộc về các lần lặp bao gồm danh sách, bộ và chuỗi - bất kỳ chuỗi nào như vậy đều có thể được lặp lại trong vòng lặp for.

Tệp có phải là một đối tượng có thể lặp lại trong Python không?

Iterables khác . Từ điển, đối tượng tệp, bộ và trình tạo đều có thể lặp lại , nhưng không có trình tự nào trong số chúng là trình tự.

Là đối tượng là iterable?

Trong JavaScript, Các đối tượng không thể lặp lại trừ khi chúng triển khai giao thức có thể lặp lại . Vì vậy, bạn không thể sử dụng cho. of để lặp lại các thuộc tính của một đối tượng.