yield 返回的是生成器,yield 是一个类似 return 的关键字,迭代一次遇到yield时就返回yield后面(右边)的值。
重点是:下一次迭代时,从上一次迭代遇到的yield后面的代码(下一行)开始执行。
生成器:避免资源的浪费,用完就扔,创建生成器用()
genetator = (x*x for x in range(5))
for v in generator:
print(v) #对生成器中的每一个进行迭代。只能进行迭代一次,在进行迭代不会产生任何结果。
yield:
生成器的作用可以便于协同程序的运行 ,函数可以暂停或是挂起,需要的时候在从暂停的时候重新开始(线程)
>>> def gen():
print("开始运行生成器")
yield 1 #对于普通的return ,返回之后函数就结束了,但是对于yield,执行后面的代码之后是暂时挂起的状态,函数并没有停止,在此调用的时候会从下一个代码接着运行
yield 2
>>> next(Gen)
开始运行生成器# 若果要是不是用next方法,直接调用函数的话不会打印这句话
1
>>> next(Gen)
2
>>> for i in gen(): #对于for循环,就相当于每次都执行next()方法。
print(i)
开始运行生成器
1
2
>>> def gen():
for i in range(3):
print('diaoyong')
yield i
yield 2
>>> g = gen()
>>> next(g)
diaoyong
0
>>> next(g)
2
>>> next(g)
diaoyong
1
通过next()方法或者是应用for循环来实现yield的调用,与rerurn不同,生成器返回值的同时函数调用并不会终止,但是在return中,遇到return之后,函数就终止了