import time
def new_test():
print('开始生孩子。。。。')
print('开始生孩子。。。。')
print('开始生孩子。。。。')
yield '我'
time.sleep(3)
print('开始生孩子')
yield '儿子'
time.sleep(3)
print('开始生孩子')
yield '孙子'
res=new_test()
print(res)
print(res.__next__())
print(res.__next__())
print(res.__next__())
yield的好处:
在很多时候,我们需要逐个去获取容器内的某些数据,而这种仅仅获取部分元素的情况,并不需要我们将容器内所有的元素都取出来。比如说一个容器内现有10000个元素,但我们只需要前5个元素,那么解决办法通常由如下两种:
1)获取容器内的所有元素,然后取出前5个;
2)从头开始,逐个迭代容器内的元素,迭代5个元素之后停止。显而易见,如果容器内的元素数量非常多(比如有10 ** 8个),或者容器内的元素体积非常大,那么后一种方案能节省巨大的时间、空间开销。
现在假设,我们有一个函数,其产出(返回值)是一个列表。而若我们知道,调用者对该函数的返回值,只有逐个迭代这一种方式。那么,如果函数生产列表中的每一个元素都需要耗费非常多的时间,或者生成所有元素需要等待很长时间,则使用
yield 把函数变成一个生成器函数,每次只产生一个元素,就能节省很多开销了。
def product_baozi():
for i in range(100):
print('正在生产包子')
yield '一屉包子%s' %i #i=1
print('开始卖包子')
pro_g=product_baozi()
baozi1=pro_g.__next__()
#加代码
baozi1=pro_g.__next__()
母鸡下蛋
def xiadan():
for i in range(100):
yield '鸡蛋%s' %i
alex_mjd=xiadan()
jidan=alex_mjd.__next__()
print('lzp取鸡蛋',jidan)
print('wjs取鸡蛋',jidan)
print('zxl取鸡蛋',jidan)
print('yxm取鸡蛋',jidan)
print(xiadan())
return
缺点1:占用空间大
缺点2:效率低