生成器是这样一个函数,记住上次返回时在函数体中的位置,对生成器函数的第二次(或者第N次)调用跳转至该函数中间,而上次调用的局部变量都保持不变;
生成器不仅记住了它的数据状态,生成器还记住了它在流控制构造中的位置;
生成器的特点:
1.节约内存;
2.迭代到下一次调用时,所使用的参数都是第一次所保留的,即是说,在整个所有函数调用的参数都是第一次所调用留下的,而不是新创建的;
还有一个用处就是 三大阵营中的一个 协程, 三大阵营一共有三个 : 线程,进程,协程。
def test1():
while True:
print("----1-----")
yield None
def test2():
while True:
print("----2-----")
yield None
t1=test1()
t2=test2()
while True:
t1.__next__()
next(t2)
为什么yield 会能同时运行两个程序呢, 还是 yield 的惰性导致的, 遇到yield 就停一下, 这样就可以释放执行控制权,切换很快就很认为是多任务执行