python迭代器

迭代器和可迭代对象

迭代不是简单的重复(简单的while循环并不是迭代),而是为了逼近所需的目标或结果,每一次对过程的重复称为一次“迭代”,而每一次迭代得到的结果会作为下一次迭代的初始值

可迭代对象(Iterable)

内置有__iter__方法的对象都是可迭代对象,字符串、列表、元组、字典、集合、打开的文件都是可迭代对象

print(dir({'name':'egon'}))
# dir()方法能够查看内置方法

迭代器(Iterator)

调用obj.iter()方法返回的结果就是一个迭代器对象(Iterator)。迭代器对象是内置有iter和next方法的对象,执行迭代器对象.iter()方法得到的仍然是迭代器本身,而执行迭代器.next()方法就会计算出迭代器中的下一个值
迭代器是Python提供的一种统一的、不依赖于索引的迭代取值方式,只要存在多个“值”,无论序列类型还是非序列类型都可以按照迭代器的方式取值

s={1,2} # 可迭代对象s
i=iter(s)  # 本质就是在调用s.__iter__(),返回s的迭代器对象i
next(i)  # 本质就是在调用i.__next__()
1
next(i)
2
next(i)  # 返回StopIteration的异常,代表无值可取,迭代结束

for循环

# 前面讲过for循环,能够很方便的进行循环取值
dic1=['a','b','c','d','e']
for item in dic1:   
    print(item)

# 用while循环实现迭代效果
dic1=['a','b','c','d','e']
i=iter(dic1) # 每次都需要重新获取一个迭代器对象
while True:
    try:
        print(next(i))
    except StopIteration: #捕捉异常终止循环
        break

for 循环原理:会先调用可迭代对象dic1内置的iter方法拿到一个迭代器对象,然后再调用该迭代器对象的next方法将取到的值赋给item,执行循环体完成一次循环,直到捕捉StopIteration异常,结束迭代

迭代器与列表等容器类数据类型的比较

优点:

  • 提供了一种统一的迭代取值方式
  • 惰性计算:同一时刻在内存中只有一个值,可以只在需要时才去调用next来取值,理论上可以存放无穷大的数据,而对于其他容器类型,如列表,需要把所有的元素都存放于内存中,受内存空间的限制

缺点:

  • 除非取尽,否则无法获取迭代器的长度
  • 只能向下取值,不能往回取,如果想要往回取值,只能重新创建迭代器
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值