1.什么是迭代器协议
(1)迭代器协议:对象必须提供一个next方法,执行该方法要返回迭代中的下一项,要么就引起一个StopIteration异常,以终止迭代(只能往后走不能往前退)
(2)可迭代对象:实现了迭代器协议的对象(如何实现:对象内部定义一个__iter__()方法)
(3)协议:协议是一种约定,可迭代对象实现了迭代器协议,python的内部工具(如for循环、sum、min、max函数等)使用迭代器协议访问对象
2.python中强大的for循环机制
(1)for循环的本质:循环所有对象,全部使用迭代器协议
(2)(字符串、列表、元组、字典、集合、文件对象)这些都不是可迭代对象,只不过在for循环中,调用了他们内部的 __iter__ 方法,把他们变成了可迭代对象
然后for循环调用可迭代对象的 __next__ 方法去取值,而且for循环会捕捉StopIteration异常,以终止迭代
用while循环模拟for循环
l = [1,2,3,4,5] diedai_l=l.__iter__() while True: try: print(diedai_l.__next__()) except StopIteration: print('迭代完毕了,循环终止') break 运行结果: 1 2 3 4 5 迭代完毕了,循环终止
3.next()内置函数 next()内置函数实际上就是在调用 l_iter.__next__()
l = [1,2,3,4,5]
l_iter = l.__iter__()
print(next(l_iter))
print(next(l_iter))
print(l_iter.__next__())
运行结果:
1
2
3