python中生成器的惰性机制

生成器有一个惰性机制,只有当你需要的时候才给你(一个个的取),而不是一下字全部给你。可能有些抽象,来一个例子 吧。

普及一个小知识**:一只母鸡并不是生一辈子鸡蛋,有一个时间段。**

例:小明和小红两个人想吃鸡蛋,这天,小明和小红一起去街上卖鸡蛋,回到家,小明买了一筐鸡蛋,大概有100个左右吧,小红买了一只母鸡(假设去除一切外界条件,母鸡不吃不喝也能生蛋(在生蛋期间)并且长生不老,只要主人需要,可以随时生蛋)。小明有一筐鸡蛋,所以可以几个蛋、十几个蛋,乃至一百个蛋一起吃。但是小红只能一个一个的吃,因为母鸡只会因为主人的需要下蛋。注意:这时候母鸡的行为就是python中生成器的惰性机制,只会根据需要取出,而且是一个个的,并不会一下子全部取出。这里有个格外注意的是:****生成器并不是取之不竭的,是可以取尽的。就像鸡一直会下蛋,但是会有下蛋的期间。如果一直下蛋且长生不老我早就养鸡去了 --。
生成器中的出就像数据结构中的出栈一样,出栈的多少取决于你栈里面有多少,栈里面出完了也就变成空了,什么都没有了。像装了稻谷的袋子一样,倒出的时候不可能无限的倒出稻谷,只能倒出袋子中原有的稻谷。否则我也想要个这样的袋子 -
-

下面来举个例子说明一下吧:

# #生成器有有一个惰性机制(母鸡)     你要他才给        一篮鸡蛋(拼命吃)和一只母鸡(要一个下一个)
def func():
    print(111)
    print(222)
    yield 222
    print(333)
    yield 777
#TODO yield是分段来执行一个函数,yield可以出现,
g=func()
print("&"*10)
g1=(i for i in g)
print(g1)
# for i in g1:
#     print(i)

print(g)
print(g1)
print(list(g))





结果:
&&&&&&&&&&
<generator object <genexpr> at 0x0000016C0A66AD60>
<generator object func at 0x0000016C0ABBFBA0>
<generator object <genexpr> at 0x0000016C0A66AD60>
111
222
333
[222, 777]

在这里插入图片描述
除此之外就是产生生成器对象,循环遍历后会发现取光了是怎么回事呢
在这里插入图片描述

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不良使

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值