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