迭代器,生成器

迭代器

访问集合元素的一种方式。迭代器对象从集合的第一个元素访问,直到所有的元素被访问结束。迭代器只能往前不会后退。另外,迭代器的一大优点是不要事先准备好整个迭代过程中的所有元素。迭代器仅仅在迭代到某个元素时才计算该元素,而在这之前或之后,元素可以不存在或者被销毁,这个特点使得它特别适合用于遍历一些巨大的或是无限的集合。
特点:
1.访问者不需要关心迭代器的内部的结果,仅需要next()方法不断地去取下一个内容
2.不能随机访问集合中的某个值,只能从头到尾 依次访问
3.访问到一半时不能往回退
4.便于循环比较大的集合,节省内存

a = iter([1,2,3,4,5])
print(a)
<list_iterator object at 0x030AC4F0>
a.__next__()

生成器

定义:一个函数调用时返回一个迭代器,那这个函数就叫做生成器,如果函数中包含yield语法,那这个函数就会变成生成器。
作用:
yield的主要效果就是可以使函数中断,并保存中断状态,中断后,代码可以继续往下执行,过一段时间还可以再重新调用这个函数,从上次yield的下一句开始执行。

def cash(amount):
    while amount>0:
        amount-=100
        yield 100
        print("又来取money")

atm = cash(500)
print(type(atm))
print(atm.__next__())
print(atm.__next__())
print(atm.__next__())
print(atm.__next__())
print(atm.__next__())
<class 'generator'>
100

使用yield实现单线程中的异步效果

import time

def consumer(name):
    print("%s 准备吃啦!" % name)
    while True:
        baozi = yield
        print("饭团[%s]来了,被[%s]吃了!" % (baozi, name))

def producer(name):
    c = consumer('A')
    c2 = consumer('B')
    c.__next__()
    c2.__next__()
    print("开始准备做啦!")
    for i in range(10):
        time.sleep(1)
        print("做了2个饭团!")
        c.send(i)
        c2.send(i)

producer("dan")

讨厌的人无论做什么都觉得讨厌,听到声音都觉得不爽

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值