-
python基础教程之python基础(13):函数名的使用、第一类对象、闭包、迭代器(6)
本站最新发布 Python从入门到精通|Python基础教程
试听地址 https://www.xin3721.com/eschool/pythonxin3721/
Iterator)) #False
print(isinstance(l_iter,Iterator)) #True
print(isinstance(l_iter,Iterable)) #True
试听地址 https://www.xin3721.com/eschool/pythonxin3721/
Iterator)) #False
综上,我们可以确定,如果对象中有__iter__函数,那么我们认为这个对象遵守了可迭代协议,就可以获取到相应的迭代器。这⾥的__iter__是帮助我们获取到对象的迭代器,我们使⽤迭代
器中的__next__()来获取到⼀个迭代器中的元素,那么我们之前讲的for的⼯作原理到底是什么? 继续看代码。
- s = "我爱北京天安⻔"
- c = s.__iter__() # 获取迭代器
- print(c.__next__()) # 使⽤迭代器进⾏迭代. 获取⼀个元素 我
- print(c.__next__()) # 爱
- print(c.__next__()) # 北
- print(c.__next__()) # 京
- print(c.__next__()) # 天
- print(c.__next__()) # 安
- print(c.__next__()) # ⻔
- print(c.__next__()) # StopIteration
for循环的机制:
- for i in [1,2,3]:
- print(i)
使⽤while循环+迭代器来模拟for循环(必须要掌握)
- lst = [1,2,3]
- lst_iter = lst.__iter__()
- while True:
- try:
- i = lst_iter.__next__()
- print(i)
- except StopIteration:
- break
总结:
Iterable: 可迭代对象,内部包含__iter__()函数。
Iterator: 迭代器,内部包含__iter__() 同时包含__next__()。
迭代器的特点:
1. 节省内存2. 惰性机制3. 不能反复, 只能向下执⾏
我们可以把要迭代的内容当成⼦弹,然后呢,获取到迭代器__iter__(),就把⼦弹都装在弹夹中,然后发射就是__next__()把每⼀个⼦弹(元素)打出来。也就是说,for循环的时候,⼀开始的
时候是__iter__()来获取迭代器,后⾯每次获取元素都是通过__next__()来完成的,当程序遇到StopIteration将结束循环。