迭代器与生成器

目录

前言

一、迭代器

1、什么是迭代?

2、什么是可迭代对象?什么是迭代器对象?

3、迭代器优缺点

二、生成器

1.什么是生成器,常见的用法

总结


 


前言

学习掌握迭代器生成器的用法。

 

一、迭代器

1、什么是迭代?

迭代是一个过程重复但是结果并不重复的过程,其每次重复运行都有关联,比如:
list1=[1,2,3,4,5,6,7,8]# 是迭代的过程
for i in list1:
    print i

#而下面的不是迭代
while True:
    print("==========>")

2、什么是可迭代对象?什么是迭代器对象?

列表[] 字典{} 元组() 字符串"hello" 文件file 集合set等都是可迭代对象,其中file文件对象既是可迭代对象也是迭代器对象。

可迭代对象是指,可以执行__iter__()的对象,比如:
列表[] 字典{} 元组() 字符串"hello" 文件file 集合set等都是可迭代对象,其中file文件对象既是可迭代对象也是迭代器对象。
list1=[1,2,3,4,5,6,7,8]
print(list1.__iter__())#<list_iterator object at 0x000002261DC5D070>


迭代器对象:
    list1=[1,2,3,4,5,6,7,8]可迭代对象
    list1.__iter__()迭代器对象

要迭代器对象运行,开始迭代,需要执行.__next__()方法。
list1=[1,2,3,4,5,6,7,8]#可迭代对象
iter_list1=list1.__iter__()#迭代器
print(iter_list1.__next__())#执行一次,输出一个结果。可用一个while循环。



3、迭代器优缺点

优点:节省内存,可以不依赖索引值取值。

缺点:只能从前往后取值,不知道取值的长度。

 

二、生成器

1.什么是生成器,常见的用法

 生成器是一种特殊的迭代器,是一种我们自制的迭代器。yield可以把函数停住。 比如:

#自定义的生成器,一般的range(start,stop,step)的step只能是整数
def my_range(start,stop,step):
    n=start
    while n < stop:
        yield n
        n+=step
        print(n)
res=my_range(1,10,0.5)
while True:
    try:
        print(res.__next__())
    except:
        break
    
def eat(name):
    print("%s is read for eating" %name)
    while True:
        food=yield
        print("%s is read for eat %s" %(name,food))
person1=eat("Albert")
person1.__next__()#Albert is read for eating 因为函数在yield那里停住了
person1.__next__()#再执行的时候才传值进去,这里相当于传的None所以运行结果为:
                  #Albert is read for eating
                  #Albert is read for eat None

 

2.生成器的传值
def eat(name):
    print("%s is read for eating" %name)
    foods=[]
    while True:
        food=yield
        print("%s is read for eat %s" %(name,food))
        foods.append(food)
        print("%s has eaten %s" %(name,foods))
person1=eat("Albert")
person1.send(None)#yield函数的初始化,其效果等同于person1.__next__()
person1.send("蒸羊羔")#传值用.send()
person1.send("蒸鹿茸")
person1.send("烧子鹅")
person1.send("烧花鸭")
person1.send("蒸熊掌")
person1.close()#关闭生成器

 


总结

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值