迭代器
- 自定义迭代器 -》 在类里面提供__iter__和__next__方法,创建的对象就是迭代器
- 迭代器的作用: 记录当前遍历的位置及获取下一个位置的值
注意点: 数据获取完成一定要抛出停止迭代的异常,否则一直获取None
def __next__(self):
if self.current_index < len(self.list):
self.current_index += 1
return self.list[self.current_index - 1]
else:
raise StopIterationiter函数的作用: 获取指定可迭代对象的迭代器,会调用可迭代对象的__iter__的方法
next函数的作用: 获取指定迭代器中的下一个执行,会调用迭代器中的__next__的方法
for循环的本质:如果遍历的对象是可迭代对象,那么首先使用iter获取迭代器,然后通过next函数依次获取迭代器中每一个数据
如果遍历的对象是迭代器那么直接使用next函数依次获取获取迭代器的每一个值
for循环内部自己捕获了停止迭代的异常,不需要程序员自己处理, while 循环没有做异常捕获
生成器
- 生成器是一个特殊的迭代器,可以使用next函数和for循环获取生成器的值
生成器创建的两种方式一直是列表推导式[]-->()即为生成器的一种方式 另一种方式是在def()中看到yield关键字
启动生成器的时候遇到yield代码会暂停,下次启动生成器会在暂停的位置继续往下执行
yield和return的总结
yield是每次启动生成器都会返回一个结果,也就是yield可以返回多次值
return在生成器里面使用语法上没有问题,但是代码执行到return关键字的时候,会抛出一个停止迭代的异常
提示:return只能返回一次值
用send()给生成器传参
- send方法第一次启动生成器的时候传入的参数必须是None,否则崩溃,一般第一次启动生成器使用next函数
value = f.send(None)
print(value)
value = f.send("嘻嘻")
print(value)
本文介绍如何在Python中自定义迭代器,包括实现__iter__和__next__方法,以及生成器的两种创建方式和使用方法。此外还探讨了yield与return的区别,以及send方法如何用于给生成器传递参数。
1645

被折叠的 条评论
为什么被折叠?



