生成器的工作原理
如果再次调用函数时。代码是从yield的位置继续往下执行。而不是从函数本身。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
# 生成器一个特殊的迭代器,他没有__iter__ , __next__两个方法,但通过yield,同样实现了迭代器的功能,所以说生成器是一个特殊的迭代器 def create_num(all_count): print('1'.center(50, '-')) a, b = 0, 1 count = 0 while count < all_count: print('2'.center(50, '-')) yield a print('分割线'.center(50, '-')) a, b = b, a + b count += 1 print('4'.center(50, '-')) t1 = create_num(10) # 生成迭代器的对象 result = next(t1) print(result) result = next(t1)
调用生成器的两种方法
# 利用yield的特性,来回切换执行两个函数,达到多任务的效果
import time def task01(): while True: print('1') time.sleep(0.1) yield def task02(): while True: print('2') time.sleep(0.1) yield def main(): t1 = task01() t2 = task02() while True: next(t1) next(t2) if __name__ == '__main__': main()