python 迭代器 和 生成器 的个人理解

先说可迭代对象:

一类是集合数据类型,如list、tuple、dict、set、str等;一类是generator,包括生成器和带yield的generator function。

也就说凡是能迭代的都是可迭代对象

判断是否可以迭代  用isinstance 来判断

迭代器:迭代器可以看作是一个特殊的对象,每次调用该对象时会返回自身的下一个元素,从实现上来看,一个可迭代的对象必须是定义了__iter__()方法的对象,而一个迭代器必须是定义了__iter__()方法和next()方法的对象。

a = [1,2,3,4,5]
b = iter(a)
print(b)

out :  <list_iterator object at 0x000001ACEBD3E208>  #python中内置的iter()函数可以创造一个迭代器

print(next(a))
print(next(a))
print(next(a))

输出依次是1,2,3    超出范围时输出 StopIteration

生成器:

有两种方法  一是可以把列表生成式的[]改为() 就是一个生成

a = [i+1 for i in range(10)]
print(a)

out : [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

a = (i+1 for i in range(10))
print(a)

out : <generator object <genexpr> at 0x000001ACEBD23570>

  二:是在一个有循环体的函数里  把 print()改为 yeild()

def fib(max):
     n,a,b=0,0,1
     while n<max:
#         print(b)
         yield b
         a,b=b,a+b
         n+=1
     return 'done'
 
f=fib(6)
print(f)        

out : <generator object fib at 0x000001ACEBC91750>

从这里看  这个函数就是生成器, 但是

print(next(f))     out :1
print(next(f))     out :   2

这里又实现了迭代的功能,一次只能产生一个值,像个迭代器,因此说  生成器看起来像是一个函数,但是表现得却像是迭代器

这也就是说为什么有人说生成器是一个特殊的迭代器,或有人说生成器是一个能够生成迭代器 函数 

生成器是一个特殊的程序,可以被用作控制循环的迭代行为,python中生成器是迭代器的一种,使用yield返回值,函数每次调用yield会暂停,而可以使用next()函数和send()函数恢复生成器。

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值