# 打印斐波那契数列
def create_num(all_num):
a, b = 0, 1
current_num = 0
while current_num < all_num:
# print(a)
# 生成器,如果一个函数中有yield,那么这个函数就不再是函数,就是一个生成器模板
yield a
a, b = b, a + b
current_num += 1
# 如果在调用create_num的时候,发现这个函数中有yield那么此时,不是调用函数,而是创建一个生成器
obj = create_num(10)
ret = next(obj)
print(ret)
ret = next(obj)
print(ret)
# 生成器是一种特殊的迭代器
for num in obj:
# print(num)
pass
E:\python_project\NetWork\venv\Scripts\python.exe E:/python_project/NetWork/协程/生成器.py
0
1
Process finished with exit code 0
使用send方式
# 打印斐波那契数列
def create_num(all_num):
a, b = 0, 1
current_num = 0
while current_num < all_num:
# print(a)
# 生成器,如果一个函数中有yield,那么这个函数就不再是函数,就是一个生成器模板
ret=yield a
print("yield接收send的值:",ret)
a, b = b, a + b
current_num += 1
# 如果在调用create_num的时候,发现这个函数中有yield那么此时,不是调用函数,而是创建一个生成器
obj = create_num(10)
ret = next(obj)
print(ret)
# 可以传参数
ret = obj.send("sssss")
print(ret)
# 生成器是一种特殊的迭代器
# for num in obj:
# print(num)
# pass
E:\python_project\NetWork\venv\Scripts\python.exe E:/python_project/NetWork/协程/生成器.py
0
yield接收send的值: sssss
1
Process finished with exit code 0
使用yield 完成多任务
import time
def task_1():
while True:
print("task1")
time.sleep(1)
yield
def task_2():
while True:
print("task2")
time.sleep(1)
yield
def main():
t1 = task_1()
t2 = task_2()
while True:
next(t1)
next(t2)
if __name__ == "__main__":
main()
E:\python_project\NetWork\venv\Scripts\python.exe E:/python_project/NetWork/协程/使用yield完成多任务.py
task1
task2
task1
task2
task1
task2
task1
task2
task1
task2
task1
task2
task1
task2
task1
task2
task1
task2
task1
task2
task1
task2
task1
task2
task1
task2
task1
task2
task1
task2
task1
task2
task1
task2
task1
task2
task1
task2
Process finished with exit code -1
网友评论