迭代器,生成器

迭代器(iterator)

从本质上来说,迭代是重复反馈过程的活动,其目的是接近所需要的目标和结果,每一次重复称为一次迭代,每一次迭代得到的结果称为下一次迭代的初始值。
定义

  • 具有iter()和next()方法就是迭代器

模拟一下for循环的实现

lst=[1,2,3,4,5]
l=lst.__iter__()#将可迭代对象转为迭代器
while True:
    try:
        print(l.__next__())
    except StopIteration:
        break

迭代器:
优点:节省内存,惰性机制(典型以时间换空间)
缺点:一次性的(用完就没有了),不能逆行(不能后退)

生成器(generator)
  • 本质是一个迭代器,区别刻意理解为一个是Python自带的,一个是自己写的
  • 两种实现方式一种是函数形式,一种是生成器推导式形式,函数中把return换为yield,推导式则是为()形式
  • 如果具有send方法救援判定为是生成器
 坑:#这样会导致每次都重新创建新的生成器,从第一个yield遍历
 def func():
	 yield 1
     yield 2
 func() # 生成一个生成器
 print(func().__next__())  # 这样会一直重新创建生成器,不断输出1
 print(func().__next__())  

解决方法:这样创建一次,就可以了
  g=func()
  print(next(g))
  print(next(g))

总结:
在函数中将return改写成yield就是一个生成器

yield 和 return 的区别
相同点:
1.都是返回内容
2.都可以返回对个,但是return写多个只会执行一个

不同点:
1.return 终止函数 yield是暂停生成器
2.yield能够记录当前执行位置

一个__next__() 对应一个yield

生成器可以使用for循环获取值
yield from – 将可迭代对象元素逐个返回
在函数的内部 yield 能将for循环和while循环进行临时暂停
yield返回是迭代器对象
yield from返回的是迭代器对象中每一个元素

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值