什么是迭代器,举例详解

什么是迭代器?

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
# 并且到迭代器的最后就停止

判断一个变量/值是否是迭代器的方法

lst_iterator = [].iter()

print(‘iter’ in dir(lst_iterator))

print(‘next’ in dir(lst_iterator))

print(‘iter’ in dir(lst_iterator) and ‘next’ in dir(lst_iterator))

f是一个迭代器还是一个可迭代的

range是一个迭代器还是一个可迭代的

f = open(‘file’)

print(‘iter’ in dir(f) and ‘next’ in dir(f))

a = range(10)

print(‘iter’ in dir(a))

print(‘iter’ in dir(a) and ‘next’ in dir(a))

第二种方法

from collections import Iterator

f = open(‘file’)

print(isinstance(f,Iterator))

print(isinstance(range(10),Iterator))

a = range(10)

for i in a:

print(i)

for i in a:

print(i)

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值