46 lines
1.1 KiB
Python
46 lines
1.1 KiB
Python
"""
|
||
协程 - 可以通过yield来调用其它协程,yield将执行权转让给其他协程
|
||
协程之间不是调用者与被调用者的关系,而是彼此对称平等的
|
||
"""
|
||
|
||
|
||
def num_generator(start, end):
|
||
"""指定起始值的整数生成器"""
|
||
for num in range(start, end + 1):
|
||
yield num
|
||
|
||
|
||
def square_mapper(numbers):
|
||
"""将数值映射为其平方的协程"""
|
||
for num in numbers:
|
||
yield num ** 2
|
||
|
||
|
||
def prime_filter(numbers):
|
||
"""从数值中过滤出素数的协程"""
|
||
for num in numbers:
|
||
flag = True
|
||
for factor in range(2, int(num ** 0.5 + 1)):
|
||
if num % factor == 0:
|
||
flag = False
|
||
break
|
||
if flag:
|
||
yield num
|
||
|
||
|
||
def main():
|
||
tasks = []
|
||
tasks.append(square_mapper(num_generator(1, 100)))
|
||
tasks.append(prime_filter(num_generator(2, 100)))
|
||
for _ in range(100):
|
||
for task in tasks:
|
||
print(f'切换到任务{task.__name__} => ', end='')
|
||
try:
|
||
print(task.__next__())
|
||
except StopIteration as error:
|
||
print(error)
|
||
|
||
|
||
if __name__ == '__main__':
|
||
main()
|