迭代器与生成器初学

本文详细介绍了Python中的可迭代对象、迭代器和生成器的概念及用法。通过实例展示了如何创建和使用迭代器,以及如何判断一个对象是否为迭代器。同时,对比了列表和生成器的区别,并给出了生成器的使用示例,强调了生成器在内存效率上的优势。此外,还探讨了StopIteration异常及其在迭代过程中的作用。
摘要由CSDN通过智能技术生成
from collections import Iterable
print(isinstance([],Iterable))           #可以遍历的对象:list、 tuple 、dict、str,虽然是Iterable(可迭代对象),却不是Iterator(迭代器)
print(isinstance('abc',Iterable))        #整形或者浮点型不能作为可迭代对象
print(isinstance(100,Iterable))
True
True
False
#创建迭代器
list = [1,2,3,4,5]
list_iter = iter(list)
print(next(list_iter))
print(next(list_iter))
print(next(list_iter))
print(next(list_iter))
print(next(list_iter))
next(list_iter)          #指针已到列表外
1
2
3
4
5



---------------------------------------------------------------------------

StopIteration                             Traceback (most recent call last)

<ipython-input-12-a6d6480dc22f> in <module>
      7 print(next(list_iter))
      8 print(next(list_iter))
----> 9 next(list_iter)


StopIteration: 
#判断是否是迭代器 使用isinstance()方法判断
from collections import Iterator
print(isinstance([],Iterator))
print(isinstance('abc',Iterator))
print(isinstance(iter([]),Iterator))
print(isinstance(iter('abc'),Iterator))
False
False
True
True
G = (x*2 for x in range(5))                  #小括号形成生成器
print(type(G))
<class 'generator'>
G = [x*2 for x in range(5)]                  #大括号形成列表
print(type(G))
<class 'list'>
def fib(n):
    current = 0
    num1,num2 = 0,1
    while current <n:
        num =num1
        num1,num2 = num2,num1+num2
        current +=1
        yield num
    return 'done'
g = fib(5)
while True:
    try:
        x=next(g)
        print("value:%d"%x)
    except StopIteration as e:
        print("生成器返回值:%s"%e.value)
        break
value:0
value:1
value:1
value:2
value:3
生成器返回值:done
def gen():
    i = 0
    while i<5:
        temp = yield i
        print(temp)
        i+=1

f = gen()
print(next(f))

0

print(f.send('haha'))

haha
1

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值