Python的生成器1-生成器函数

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:效率低

注注注注注注注注注注注注注注注

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值