糖尿病康复,内容丰富有趣,生活中的好帮手!
糖尿病康复 > python中生成器的惰性机制

python中生成器的惰性机制

时间:2022-04-20 08:18:50

相关推荐

python中生成器的惰性机制

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

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

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

生成器中的出就像数据结构中的出栈一样,出栈的多少取决于你栈里面有多少,栈里面出完了也就变成空了,什么都没有了。像装了稻谷的袋子一样,倒出的时候不可能无限的倒出稻谷,只能倒出袋子中原有的稻谷。否则我也想要个这样的袋子 --

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

# #生成器有有一个惰性机制(母鸡)你要他才给 一篮鸡蛋(拼命吃)和一只母鸡(要一个下一个)def func():print(111)print(222)yield 222print(333)yield 777#TODOyield是分段来执行一个函数,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>111222333[222, 777]

除此之外就是产生生成器对象,循环遍历后会发现取光了是怎么回事呢

如果觉得《python中生成器的惰性机制》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。