python的迭代器无法输出值_python迭代器和生成器

本文详细介绍了Python中的迭代器协议,强调了迭代器对象的本质和优缺点,并通过实例探讨了生成器的使用,包括如何创建和操作生成器,以及它们在内存管理和性能上的优势。此外,还讨论了协程函数的概念,展示了如何将函数转化为生成器并进行迭代。最后,总结了迭代器、生成器、可迭代对象和容器之间的关系。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

人生还早,谁能笑到最后呢,坚持吧!

1.迭代器协议

由于生成器自动实现了迭代器协议,我们有必要了解迭代器协议是什么,才能更好的理解生成器。

1)迭代器协议:对象要提供__next()__方法,它要么返回迭代中的下一个对象,要么引起一个StopIteration错误,终止迭代

2)可迭代对象:实现了迭代器协议的对象

3)协议是一种约定,可迭代对象实现了迭代器协议,python的内部工具(如for循环,sum,min,max函数等)使用迭代器协议访问对象。

for循环的本质:循环所有对象,全都是使用迭代器协议

(字符串,列表,元组,字典,集合,文件对象)这些都不是可迭代对象,只不过在for循环式,调用了他们内部的__iter__方法,把他们变成了可迭代对象

list = ['a','b',1,2]

# for i in list:

# print(i)

list_iter = list.__iter__()#调用__iter__方法将list对象变成可迭代对象

print(list_iter.__next__())依次调用,知道引起StopIteration错误

print(list_iter.__next__())

print(list_iter.__next__())

print(list_iter.__next__())

用while循环模拟for循环做的事情

list_iter = list.__iter__()

while True:

try:

print(list_iter.__next__())

except StopIteration:

print('迭代完毕,可以终止')

break

迭代器对象的本质是一种数据流,它只是一个有序的序列,我们不能提前知道它的长度,只有不断通过__next__()取出下一个值。

Interator甚至可以表示一个无限大的数据流,例如全体自然数。而使用list是永远不可能存储全体自然数的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值