
# 1. 得到生成器方式一:推导式
g = (x * 3 for x in range(1, 5))
print(type(g))
# 两种方式得到生成器的元素
print(next(g))
print(next(g))
print(g.__next__())
print(g.__next__())
# 得到生成器方式二:借助函数完成
# 只要函数中出现了yield, 说明函数就不是函数啦,变成生成器啦。
def func():
n = 0
while True:
n += 1
yield n
print(func())
g = func()
print(g.__next__())
print(g.__next__())
print(g.__next__())
print(g.__next__())
print(next(g))
print(next(g))
print(next(g))
print(next(g))
# 利用生成器产生n个斐波那契数列的数
def fib(n):
a, b = 0, 1
count = 0
while count < n:
yield a
a, b = b, a + b
count += 1
return '没有更多元素了' # 在取完元素后报错StopIteration的提示信息
f = fib(10)
print(next(f))
print(next(f))
print(next(f))
print(next(f))
print(next(f))
print(next(f))
print(next(f))
print(next(f))
print(next(f))
print(next(f))
利用生成器实现两个任务协作进行
def task1(n):
for i in range(n):
print(f'正在搬第{i}块砖')
yield
def task2(n):
for i in range(n):
print(f'正在听第{i}首歌')
yield
t1 = task1(5)
t2 = task2(10)
if __name__ == '__main__':
"""
如果两个任务数不同 给两个任务设置状态
如果两个任务都完成之后才退出
"""
t1_status = False
t2_status = False
while True:
try:
t1.__next__()
except Exception as err:
print(err)
t1_status = True
try:
t2.__next__()
except Exception as err:
print(err)
t2_status = True
if t1_status and t2_status:
break
欢迎查看我的技术文档
网站有我的联系方式,欢迎学习交流