Python——迭代器,,生成器
迭代器(迭代取值和索引取值的对比)
生成器(自定义的迭代器)(yield)
生成器表达式
生成器试题
生成器yield关键字的补充用法(传参数)
常见的内置函数
——————————————————————————
———————————————————————————
生成器
背景:
通过列表生成式,我们可以直接创建一个列表,但是,受到内存限制,列表容量肯定是有限的,而且创建一个包含100万个元素的列表,不仅占用很大的存储空间,如果我们仅仅需要访问前面几个元素,那后面绝大多数元素占用的空间都白白浪费了。
所以,如果列表元素可以按照某种算法推算出来,那我们是否可以在循环的过程中不断推算出后续的元素呢?这样就不必创建完整的list,从而节省大量的空间,在Python中,这种一边循环一边计算的机制,称为生成器:generator
python中生成器是自定义迭代器的一种
# 生成器如何使用
关键字:yield
'''
当函数中一旦出现了yield关键字,函数在没有被调用的时候仍然是普通函数,但是只要一调用函数,那么,该函数就不是普通函数了
就变成了生成器
'''
def index():
print('from index')
print('from index')
print('from index')
yield 123,234,345 # 以元组的方式返回
print('second')
print('second')
print('second')
print('second')
yield 'hello'
print('three')
yield
res=index() # res.__iter__()
print(res) # <generator object index at 0x000002CDB20BEA50>
## 生成器其实就是一个自定义的迭代器
# res.__next__() # 只要你调用next方法,代码就会走到函数中第一个yield关键字所在的位置停住
# res.__next__() # 代码从上一次yield停住的地方继续往下执行,走到遇到下一个yield停住
print(res.__next__()) # None 123
print(res.__next__()) # None 123
print(res.__next__()) # None 123
——————————————————————————
生成器习
利用生成器的原理实现range函数的功能
——————————————————————————
生成器yield的其他用法:
1.类似return 返回值(可以返回多个值)
2.生成器开始运行,直到遇到第一个yield,输出返回值并中断生成器的运行。在后续使用next()时,代码会从上一次中断的地方继续运行
3. yield 和 send
————————————————————
生成器表达式
列表生成式
res = [name for name in names_list]
print(res) # 就是一个列表
res1 = (name for name in names_list)
print(res1)
names_list = ['kevin', 'jerry', 'tony', 'oscar']
res1 = (name for name in names_list)
print(res1) # <generator object <genexpr> at 0x00000218F4569CF0>
print(res1.__next__())
print(res1.__next__())
print(res1.__next__())
print(res1.__next__())
"""生成器表达式如果不使用数据,就不给你数据"""
把迭代器、生成器看成是一个工厂,什么时候需要数据工厂就给你加工数据
目的:就是为了节省内存空间
————————————————————
生成器试题
——————————————————————————
yield和return对比
迭代取值
1. 不依赖于索引取值的一种取值方式
2. 不能够重复取值,只能够从左往右固定取值
索引取值
1. 它能够重复取值(通过索引l[0])
2. 它需要是容器类型
迭代取值通常用于遍历整个对象的所有元素,而索引取值则是通过指定索引位置获取特定元素
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)