一. iter()的标准用法:iter(object)
object:必须是支持迭代的集合对象
- question:如何判断一个对象是否可迭代?
from collections import Iterable
isinstance(object,Iterable)
- question:定义一个可迭代对象?
需要在class里实现一个 def iter(self)方法,该方法的返回值是一个支持可迭代的对象.
class a:
list = [1, 2, 3]
def __iter__(self):
return self.list
class b:
list = [1, 2, 3]
isinstance(a(),Iterable)
# True
isinstance(b(),Iterable)
# False
二. iter()的扩展用法:iter(object, sentinel)
object:必须是一个可以callable的对象,例如方法,实现了def call(self, *args, **kwargs)方法的类
class data:
list: list = [1, 2, 3, 4, 5, 6]
index = 0
def __call__(self, *args, **kwargs):
item = self.list[self.index]
self.index += 1
return item
def __iter__(self):
self.i = iter(self.list)
return self.i
for item in iter(data(), 3): #每一次迭代都会调用一次__call__方法,当__call__的返回值等于3是停止迭代
print(item)