example12.py 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. """
  2. 协程 - 可以通过yield来调用其它协程,yield将执行权转让给其他协程
  3. 协程之间不是调用者与被调用者的关系,而是彼此对称平等的
  4. """
  5. def num_generator(start, end):
  6. """指定起始值的整数生成器"""
  7. for num in range(start, end + 1):
  8. yield num
  9. def square_mapper(numbers):
  10. """将数值映射为其平方的协程"""
  11. for num in numbers:
  12. yield num ** 2
  13. def prime_filter(numbers):
  14. """从数值中过滤出素数的协程"""
  15. for num in numbers:
  16. flag = True
  17. for factor in range(2, int(num ** 0.5 + 1)):
  18. if num % factor == 0:
  19. flag = False
  20. break
  21. if flag:
  22. yield num
  23. def main():
  24. tasks = []
  25. tasks.append(square_mapper(num_generator(1, 100)))
  26. tasks.append(prime_filter(num_generator(2, 100)))
  27. for _ in range(100):
  28. for task in tasks:
  29. print(f'切换到任务{task.__name__} => ', end='')
  30. try:
  31. print(task.__next__())
  32. except StopIteration as error:
  33. print(error)
  34. if __name__ == '__main__':
  35. main()