iter函数用法简述

Python3中关于iter(object, sentinel)方法有两个参数,使用iter(object)这种形式比较常见,iter(object, sentinel)这种形式比较少使用。

iter(object)用法

Python官方文档对于这种形式的解释很容易理解。
此时,object必须是集合对象,且支持迭代协议(iteration protocol)或者支持序列协议(sequence protocol)。说白了,也就是实现了iter()方法或者getitem()方法。

  1. li = [1, 2, 3]
  2. for i in iter(li):
  3. print(i)

iter(object, sentinel)

如果传递了第二个参数sentinel,则object必须是一个可调用的对象(如函数)。此时,iter创建了一个迭代器对象,每次调用这个迭代器对象的__next()方法,都会调用object
如果__next__的返回值等于sentinel,则抛出StopIteration异常,否则返回一个值。

  1. class TestIter(object):
  2. def __init__(self):
  3. self.li = [1, 2, 3, 4, 5]
  4. self.it = iter(self.li)
  5. def __call__(self): #定义了__call__方法的类的实例是可调用的
  6. item = next(self.it)
  7. print("__call__ is called, which would return", item)
  8. return item
  9. def __iter__(self): #支持迭代协议,即定义有__iter__函数
  10. print("__iter__ is called")
  11. return iter(self.li)
  12. t = TestIter() #t是可调用的
  13. t1 = iter(tm 2) #t必须是callable的,否则无法返回callable_iterator
  14. print(callable(t))
  15. for i in t1:
  16. print(i) #它每次在调用的时候,都会调用__call__函数,并且最后输出3就停止了。

True call is called,which would return 1 1

call is called,which would return 2

2

call is called,which would return 3

参考链接

链接1:python iter函数用法