python 生成器与迭代器

在Python中, ⼀边循环⼀边计算的机制, 称为⽣成器: generator

创建生成器: G = ( x*2 for x in range(5))

可以通过 next() 函数获得⽣成器的下⼀个返回值

没有更多的元素时, 抛出 StopIteration 的异常

生成器也可以使⽤ for 循环,因为⽣成器也是可迭代对象

 

创建生成器的另外一种方法:

def fib(times): #斐波拉契数列(Fibonacci

  n = 0

  a,b = 0,1

  while n<times:

    yield b

    a,b = b,a+b

    n+=1

  return 'done'

 

使⽤ __next__() ⽅法

使⽤send() 方法 (第一次不能使用,使用前先调用next)

next()等价于send(None)

def gen():

i = 0

while i<5:

temp = yield i #接收send传入的参数

print(temp)

i+=1

⽣成器的特点:

1. 节约内存

2. 迭代到下⼀次的调⽤时, 所使⽤的参数都是第⼀次所保留下的

 

迭代是访问集合元素的⼀种⽅式。 迭代器是⼀个可以记住遍历的位置的对象 。迭代器只能往前不会后退

可迭代对象(Iterable)

集合数据类型, 如 list 、 tuple 、 dict 、 set 、 str 等

⽣成器和带 yield 的generator function

如何判断对象可迭代?

from collections import Iterable

isinstance([], Iterable)

迭代器(Iterator):可以被next()函数调⽤并不断返回下⼀个值的对象称为迭代器

from collections import Iterator

isinstance((x for x in range(10)), Iterator)

iter()函数 :将可迭代对象转换成迭代器

 

转载于:https://www.cnblogs.com/Minlwen/p/10589412.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值