Thông báo: Download 4 khóa học Python từ cơ bản đến nâng cao tại đây.
Cách kiểm tra một đối tượng có thể lặp (iterable) trong Python
Một iterable là một đối tượng có thể được duyệt qua, ví dụ như mảng (array), chuỗi (string), hoặc tuple.Trong một số trường hợp, đặc biệt khi làm việc với các kiểu dữ liệu tùy chỉnh, chúng ta có thể không biết liệu một đối tượng có thể lặp hay không. Do đó, cần có cơ chế để kiểm tra xem đối tượng đó có thể lặp được hay không.
Bài viết này sẽ giới thiệu 3 cách để xác định tính chất iterable của một đối tượng trong Python.
Thử lặp qua đối tượng trong Python
Đây là cách đơn giản nhất để kiểm tra xem một đối tượng có thể lặp hay không.
try: _ = [element for element in target_variable] except TypeError: print("Đối tượng không thể lặp") else: print("Đối tượng có thể lặp")
Giải thích
- Nếu đối tượng không thể lặp, Python sẽ ném ra lỗi
TypeError
. - Nếu không có lỗi xảy ra, điều này chứng tỏ đối tượng có thể lặp được.
Kỹ thuật này được gọi là duck typing, dựa trên nguyên tắc: “Nếu nó trông giống một con vịt và kêu như một con vịt, thì nó là một con vịt” – nghĩa là thay vì kiểm tra kiểu cụ thể, ta dựa vào hành vi của đối tượng.
Bài viết này được đăng tại [free tuts .net]
Sử dụng hàm iter()
trong Python
Hàm iter()
là một cách khác để kiểm tra xem một đối tượng có phải là iterable hay không.
try: iter(target_variable) except TypeError: print("Đối tượng không thể lặp") else: print("Đối tượng có thể lặp")
Giải thích
- Hàm
iter()
kiểm tra xem đối tượng có phương thức đặc biệt__iter__()
hoặc__getitem__()
hay không. - Nếu không tìm thấy các phương thức này, Python sẽ ném ra lỗi
TypeError
. - Ngược lại, nếu đối tượng hỗ trợ một trong các phương thức trên, nó là iterable.
Sử dụng collections.abc.Iterable
trong Python
Thư viện collections
trong Python cung cấp các lớp trừu tượng (Abstract Base Classes - ABCs) để kiểm tra xem một đối tượng có hỗ trợ một giao diện cụ thể hay không.
from collections.abc import Iterable if isinstance(target_variable, Iterable): print("Đối tượng có thể lặp") else: print("Đối tượng không thể lặp")
Giải thích
Iterable
là một lớp trừu tượng trong thư việncollections.abc
.- Phương thức
isinstance()
kiểm tra xem đối tượng có phải là một instance của lớpIterable
hay không. - Cách này nhanh và rõ ràng hơn, tuy nhiên không hoạt động với các lớp chỉ định nghĩa phương thức
__getitem__()
mà không có__iter__()
.
So sánh ba cách
Phương pháp | Ưu điểm | Nhược điểm |
---|---|---|
Thử lặp qua đối tượng | Dễ hiểu, phù hợp với các trường hợp đơn giản. | Không tối ưu nếu đối tượng chứa dữ liệu lớn. |
Sử dụng hàm iter() |
Nhanh chóng, kiểm tra chính xác các phương thức cần thiết. | Có thể phức tạp hơn khi giải thích mã nguồn. |
Sử dụng collections.abc.Iterable |
Gọn gàng, phù hợp cho kiểm tra kiểu. | Không kiểm tra được các lớp chỉ có __getitem__() . |
Kết bài
Cả ba cách trên đều có thể được sử dụng để kiểm tra xem một đối tượng có thể lặp hay không. Tùy thuộc vào yêu cầu cụ thể, bạn có thể chọn cách phù hợp nhất.
- Nếu bạn muốn nhanh gọn và chính xác, dùng
iter()
. - Nếu cần kiểm tra kiểu một cách rõ ràng, sử dụng
collections.abc.Iterable
. - Nếu muốn kiểm tra trực tiếp bằng cách lặp qua, dùng phương pháp thử lặp.
Hy vọng bài viết này giúp bạn hiểu rõ hơn về tính iterable trong Python!