首页 > 代码库 > python学习随笔(七)迭代器

python学习随笔(七)迭代器

1 生成一个迭代器

sex = iter([‘赵‘,‘钱‘,‘孙‘,‘李‘])    #生成迭代器
print(sex)
print(sex.__next__())           #读取迭代器内容方法 iter.__next__()
sex_1 = sex.__next__()
print(sex_1)


‘’‘
<list_iterator object at 0x000001B26572B780>
赵
钱
’‘’

2 生成器  yield

在函数中使用yield,使函数返回一个迭代器,这个函数叫生成器,yield 后面的值可以返回,yield也可以接收传递的值

#可以中断生成器函数,下次从中断处开始执行
def cash_money(amount):
    while amount > 0:
        print(‘取钱!‘)
        yield 100
        amount -=100

def cost_money():
    print(‘花完了!‘)

atm = cash_money(1000)
print(atm.__next__())
print(atm.__next__())
cost_money()
print(atm.__next__())


‘’‘
取钱!
100
取钱!
100
花完了!
取钱!
100
’‘’
import time

def customer(name):
    print("%s准备吃包子了。。。" %name)
    while True:
        baozi = yield
        print("%s吃了%s个包子。。。" %(name, baozi))

def conductor(name1):
    print("%s开始做包子了。。。" %name1)
    a = customer(‘A‘)     #用生成器函数得到一个迭代器
    b = customer(‘B‘)
    a.__next__()      #读取迭代器中内容,预备读取yield中的内容
    b.__next__()
    for i in range(10):
        time.sleep(2)
        print("第%s次做了2个包子。。。" %(i+1))
        a.send(1)    #向生成器中的yield传入值
        b.send(1)

conductor("zhu")

‘’‘
zhu开始做包子了。。。
A准备吃包子了。。。
B准备吃包子了。。。

第1次做了2个包子。。。
A吃了1个包子。。。
B吃了1个包子。。。
第2次做了2个包子。。。
A吃了1个包子。。。
B吃了1个包子。。。
第3次做了2个包子。。。
A吃了1个包子。。。
B吃了1个包子。。。
第4次做了2个包子。。。
A吃了1个包子。。。
B吃了1个包子。。。
第5次做了2个包子。。。
A吃了1个包子。。。
B吃了1个包子。。。
第6次做了2个包子。。。
A吃了1个包子。。。
B吃了1个包子。。。
第7次做了2个包子。。。
A吃了1个包子。。。
B吃了1个包子。。。
第8次做了2个包子。。。
A吃了1个包子。。。
B吃了1个包子。。。
第9次做了2个包子。。。
A吃了1个包子。。。
B吃了1个包子。。。
第10次做了2个包子。。。
A吃了1个包子。。。
B吃了1个包子。。。
’‘’

  

 

python学习随笔(七)迭代器