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()