Python: Iterator and Iterables thì khác nhau
Bài đăng này đã không được cập nhật trong 7 năm
Vậy giữa 2 phương thức iterators and iterables có gì khác biệt. Iterables là một classes
mà implement
the phương thức iter , một phương thức trả về một kiểu iterator. Iterators là classes
mà implement
lại phương thức next (hoặc next
trong Python 2), Nó liên tục trả về các phần tử cho đến khi kết thúc vòng lặp.
Hãy xem đoạn mã sau để hiểu thêm
class Iterable:
def __init__(self):
self.counter = 0
def __iter__(self):
return Iterator(self)
class Iterator:
def __init__(self, obj):
self.obj = obj
def __next__(self):
if self.obj.counter >= 5:
raise StopIteration
self.obj.counter += 1
return self.obj.counter
next = __next__
myiterable = Iterable()
for e in myiterable:
print(e)
Kết quả
1
2
3
4
5
Trường hợp bạn nghĩ có thể sử dụng iterator
để lặp. Ta có thể kiểm tra một cách dễ dàng
myiterable = Iterable()
myiterator = iter(myiterable)
for e in myiterator:
print(e)
Bạn sẽ nhận được lỗi trả về
Traceback (most recent call last):
File "python", line 23, in <module>
TypeError: 'Iterator' object is not iterable
Bạn cũng có thể sử dụng yield để kiểm tra giá trị __iter__
và __next__
def gen():
yield 1
yield 2
print(hasattr(gen(), '__iter__'))
print(hasattr(gen(), '__next__'))
All rights reserved