Triển khai thủ công hàm len() để hiểu cơ chế đếm phần tử của iterable.
Thuật toán
- Nhận iterator (string, list, tuple...).
- Khởi tạo
count = 0. - Duyệt qua từng phần tử:
count += 1. - Trả về
count.
Code
def my_len(iterator):
count = 0
for _ in iterator:
count += 1
return count
if __name__ == "__main__":
user_input = input("Nhập chuỗi: ")
print(f"Độ dài '{user_input}' là {my_len(user_input)}")
Kết quả mẫu
Nhập chuỗi: tutorialspoint Độ dài 'tutorialspoint' là 14
So sánh với built-in len()
| Đặc điểm | len() built-in | Custom my_len() |
|---|---|---|
| Cơ chế | Gọi __len__() (C-level, O(1)) | Duyệt iterator (O(n)) |
| Hiệu năng | Cực nhanh | Chậm (Python loop) |
| Đối tượng hỗ trợ | Collection có __len__ | Mọi iterable (kể cả generator) |
Lưu ý
- Built-in
len()chỉ hoạt động với object có__len__(list, tuple, str, dict, set...). - Generator/iterator không có
__len__→TypeError. Custom function vẫn đếm được. - Trong thực tế luôn dùng built-in len(). Custom chỉ để học tập.
Kết luận
Custom len() đơn giản là vòng lặp đếm. Built-in len() tối ưu O(1) nhờ __len__ protocol. Hiểu cơ chế giúp thiết kế class đúng khi implement __len__.