python迭代器

import time
# 迭代器:通过next向后一次一次取值,不能向前,不能通过下标取值

tup = iter((1, 2, 3, 4, 5, 6))
lis = iter([11, 22, 33, 44, 55])

# 循环一次,相当于执行了一次__next__
for i in lis:
    print(i)


# 生成器
def ggg(generator):
    while generator > 0:
        generator -= 1  # 计数,递减1
        yield generator
        # 返回,然后函数暂停,可以继续操作的别代码,等待下一次执行__next__,下次从这里开始执行
        # 如果下面有代码,继续执行上一次未执行完的代码,直到再次遇到yield,如此循环
        print(generator)


num = ggg(5)

# 这样相当于循环执行了__next__,每次都将返回值传递给i
for i in num:
    pass


# 生成器
def generator(name):
    print('%s 准备就绪' % name)
    while True:
        wait = yield
        print('传递进了%s,%s开始执行' % (wait, name))

generator
# 正常函数
def b():
    a1 = generator('甲')
    a2 = generator('乙')
    a1.__next__()  # 进入生成器,不加next不会执行生成器代码
    a2.__next__()
    print('开始循环传递值')
    for i in range(5):
        time.sleep(1)
        print('操作其他代码,直到send开始继续执行生成器内的代码')
        a1.send(i)
        a2.send(i)

b()

  

posted @ 2017-03-12 18:21  破斧呈粥  阅读(115)  评论(0编辑  收藏  举报