python中生成器的惰性机制

简介: 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]

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

目录
相关文章
|
6天前
|
传感器 大数据 数据处理
深入理解Python中的生成器:用法及应用场景
【10月更文挑战第7天】深入理解Python中的生成器:用法及应用场景
11 1
|
9天前
|
存储 数据处理 Python
深入解析Python中的生成器:效率与性能的双重提升
生成器不仅是Python中的一个高级特性,它们是构建高效、内存友好型应用程序的基石。本文将深入探讨生成器的内部机制,揭示它们如何通过惰性计算和迭代器协议提高数据处理的效率。
|
14天前
|
存储 大数据 数据处理
Python 中的列表推导式与生成器:特性、用途与区别
Python 中的列表推导式与生成器:特性、用途与区别
13 2
|
15天前
|
存储 大数据 Python
Python 中的列表推导式和生成器
Python 中的列表推导式和生成器
11 1
|
24天前
|
机器学习/深度学习 设计模式 大数据
30天拿下Python之迭代器和生成器
30天拿下Python之迭代器和生成器
16 3
|
27天前
|
测试技术 数据库 开发者
Python作为一种谦逊的编程语言:对象自省机制的探讨
Python的自省机制是该语言的一个强大特性,为开发者提供了深入了解和操作对象的能力。它增强了Python的灵活性,使得开发者可以更加精准地控制程序的行为。然而,合理利用自省能力,避免其成为代码复杂性的来源,是每个Python开发者需要考虑的问题。通过熟练运用Python提供的自省工具和技巧,可以更好地设计和实现高效、易维护的Python应用。
22 2
|
5天前
|
存储 大数据 数据处理
理解Python中的生成器:高效迭代的秘密
【10月更文挑战第8天】理解Python中的生成器:高效迭代的秘密
16 0
|
5天前
|
存储 大数据 程序员
深入理解Python中的生成器
【10月更文挑战第8天】深入理解Python中的生成器
6 0
|
1月前
|
并行计算 开发者 Python
高效利用Python中的生成器提高内存管理
在处理大量数据或执行复杂计算时,内存管理成为关键问题。Python中的生成器(Generators)提供了一种优雅的解决方案,通过惰性计算和节省内存的方式显著提高程序的效率。本文将探讨生成器的基本概念,实际应用场景,以及如何利用生成器优化内存使用和提高程序性能。
|
1月前
|
消息中间件 安全 Kafka
Python IPC机制全攻略:让进程间通信变得像呼吸一样自然
【9月更文挑战第12天】在编程领域,进程间通信(IPC)是连接独立执行单元的关键技术。Python凭借简洁的语法和丰富的库支持,提供了多种IPC方案。本文将对比探讨Python的IPC机制,包括管道与消息队列、套接字与共享内存。管道适用于简单场景,而消息队列更灵活,适合高并发环境。套接字广泛用于网络通信,共享内存则在本地高效传输数据。通过示例代码展示`multiprocessing.Queue`的使用,帮助读者理解IPC的实际应用。希望本文能让你更熟练地选择和运用IPC机制。
51 10