迭代器和生成器

本文介绍如何在Python中自定义迭代器,包括实现__iter__和__next__方法,以及生成器的两种创建方式和使用方法。此外还探讨了yield与return的区别,以及send方法如何用于给生成器传递参数。

迭代器

  • 自定义迭代器 -》 在类里面提供__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 StopIteration
  • iter函数的作用: 获取指定可迭代对象的迭代器,会调用可迭代对象的__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)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值