您的当前位置:首页正文

迭代、可迭代对象、迭代器

2024-11-28 来源:个人技术集锦

概念

迭代(Iteration):一个概念词汇,指遍历一个对象中的所有元素。

可迭代(Iterable):可以被 for loop 遍历的对象,只要实现了 __iter__ 或者 __getitem__ 的对象就是可迭代对象。

迭代器(Iterator):只要实现了 __iter__ __next__ 的对象就是迭代器。可以看出 Iterator 比 Iterable 要求要更高,Iterator 本质是 Iterable 的子集。

x = [1, 2, 3]

### Method 1: use "dir()"
print(dir(x))
# ['__add__', '__class__', '__contains__', '__delattr__', '__delitem__',
# '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__',
# '__getitem__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__',
# '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mul__',
# '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__',
# '__rmul__', '__setattr__', '__setitem__', '__sizeof__', '__str__',
# '__subclasshook__', 'append', 'clear', 'copy', 'count', 'extend', 'index',
# 'insert', 'pop', 'remove', 'reverse', 'sort']

### Method 2: use "hasattr()"
print(hasattr(x, '__iter__'))
# True
print(hasattr(x, '__getitem__'))
# True
print(hasattr(x, '__next__'))
# False

因此列表对象仅是可迭代对象,而不是迭代器对象。不过由于 list 实现了 __iter__ 函数,因此可以通过 iter(list) 来返回一个迭代器对象。

for loop 调用细节

 for loop 的对象并不要求是 iterator,只需要 iterable 就可以了。

显示全文