iter(object[, sentinel]):
1, help(iter)和python文档bultinFunction初步了解
2, 如果没有第二个参数
class seq:
def __getitem__(self, idx):
return idx
## 只要实现了__getitem__方法的(sequnce protocol)就可以作为入参。
s = seq()
si = iter(s)
print(si) ## <iterator object at 0x000001723433E908>
##返回的是无限迭代器。如果想构造有限迭代器,可以__init__一个数组,然后修改__getitem为获取数组素。
##以下代码输出0.1.2.3..........
for i in si:
print(i)
##以下代码输出同上, 说明for循环是先调用iter()函数(不是__iter__()方法,因为s没有该方法),再不断调用__next__()方法, 直到出现StopIteration异常
for i in s:
print(i)
class ite:
def __iter__(self):
return self
##只有__iter__方法会报错,可以推断ite()函数调用__ite__方法(如果对象没有__getitem方法)
i = ite()
ii = iter(i)##TypeError: iter() returned non-iterator of type 'ite'
class ite:
def __iter__(self):
return None
def __next__(self):
pass
##结合前例证明ite()函数调用__ite__方法, 因为报错信息先后显示返回值是ite, None
i = ite()
ii = iter(i)##TypeError: iter() returned non-iterator of type 'NoneType'
class ite:
def __iter__(self):
return self
def __next__(self):
pass
##调用__iter__返回ite对象, 且python认为实现__iter__和__next__为iterator对象
i = ite()
ii = iter(i)##<__main__.ite object at 0x000001BA72EB66A0>
next(iterator[, default]):
1,help(next)和官方文档初步了解:next()调用对象的__next__方法