什么是迭代器?
l = [1,2,3,4]
res = l.iter()
print(res)
list_iterator iterator迭代器
dir(l)
print(dir(res))
res中 但是不在l中的所有方法
print(set(dir(res))-set(dir(l)))
{‘next’, ‘setstate’, ‘length_hint’}
迭代器中特有的方法,l中没有
print(res.length_hint()) # 迭代器中有多少个元素
for i in res:
print(i)
res.setstate(2) # 控制迭代器从哪儿开始迭代
for i in res:
print(i)
print(res.next()) # 从迭代器中取下一个值
print(res.next())
print(res.next())
print(res.next())
print(res.next())
for循环一个列表的时候必须用的
# __next__取下一个值
迭代器协议 : 含有__next__和__iter__方法的变量/值都是迭代器
迭代器的特点:
# 具有next和iter方法
# 通过一个next多次执行就可以获得所有这个容器中的值
# 迭代器中的值只能取一次
# 不取的时候值不出现
for循环取值
# for循环内部的机制就是迭代器取值的机制
# 在for循环执行的过程中 : 先把可迭代的变成一个迭代器,然后再从中一个一个的取值
range生成的就是一个迭代器,创建这个迭代器并不会真的把迭代器中的所有数据一次性生成
什么时候生成呢? 只有通过next取值的时候才会生成
记住你要多少个值 ,当前该给你什么,并且记住我下一个该给你什么,下一个和当前这个数的关系
f文件句柄
f记住 当前读到哪个位置了
a = list(range(1000000000))
print(a)
迭代器的作用就是节省内存,for循环就是利用了迭代器节省内存的特点来对python当中的变量来进行操作的
l = [1,2,3,4]
res1 = l.iter()
res2 = l.iter()
res1和res2都是迭代器
是两个完全不同的迭代器
for i in res1:
print(i)
print(’------’)
for i in res1:
print(i)
print(’^^^^^^’)
for i in l.iter():
print(i)
print(’******’)
for i in l.iter():
print(i)
for i in l:
print(i)
for i in l:
print(i)
自己创建一个迭代器
循环这个迭代器
dic = {‘k’:‘v’,‘k2’:‘v2’}
dic_iter = dic.iter()
print(dic_iter)
print(dic_iter.next())
for k in dic_iter:
print(k)
自己创建多个迭代器 : 每次执行iter方法就创建一个迭代器,每个迭代器都只能取值一次
循环这些迭代器
iter1 = dic.iter()
iter2 = dic.iter()
用while循环实现一个for循环的功能(循环list/dict)
l = [1,2,3,5,6,7,12,23,412]
l_iter = l.iter()
while True:
try: # 要保护的代码
print(l_iter.next())
except StopIteration: # 要保护的代码中一旦出现了StopIteration错误,程序不报错,直接执行break
print(‘报错啦’)
count = 0
l_iter = l.iter()
while count < len(l):
print(l_iter.next())
count += 1
本质上for循环替我们做了上面程序的一系列操作:
# 生成迭代器
# 循环每一次对这个迭代器执行next
# 并且到迭代器的最后就停止