1.迭代器
- 可迭代对象:定义了__iter__方法的类创建的对象,__iter__方法用于返回迭代器实例。比如说list、tuple、dict、set、str、range类都提供了返回迭代器实例的特殊方法
__iter__
,他们创建的对象都可以称之为可迭代对象
print('__iter__' in dir(int))
print('__iter__' in dir(bool))
print('__iter__' in dir(list))
print('__iter__' in dir(tuple))
print('__iter__' in dir(dict))
print('__iter__' in dir(str))
print('__iter__' in dir(set))
print('__iter__' in dir(range))
f = open(R'main.py', mode='r')
print('__iter__' in dir(f))
- 迭代器:定义了__iter__方法和__next__方法的类创建的对象就是迭代器,__next__方法用于返回容器的下一个元素。例如文件句柄
print('__next__' in dir(int))
print('__next__' in dir(bool))
print('__next__' in dir(list))
print('__next__' in dir(tuple))
print('__next__' in dir(dict))
print('__next__' in dir(str))
print('__next__' in dir(set))
print('__next__' in dir(range))
f = open(R'main.py', mode='r')
print('__next__' in dir(f))
- 可迭代对象转化为迭代器:
- 使用iter函数
- 使用可迭代对象的__iter__方法
- 示例如下
li = [1, 2, 3]
# li_iterator = iter(li)
li_iterator = li.__iter__()
print(li_iterator) # <list_iterator object at 0x000001F9EEAFBCD0>
# 遍历:使用next函数或者迭代器的__next__方法取值
while 1:
try:
# print(next(li_iterator), end='\t')
print(li_iterator.__next__(), end='\t')
except StopIteration:
break
2.生成器
- 生成器:本质是迭代器,生成器可以让编写返回元素序列的函数所需的代码更加简单和高效。基于yield语句,生成器可以暂停函数并返回一个中间结果。这个函数会保存执行上下文,稍后在必要时恢复。
- 生成器的构建方式:
- 通过自定义生成器函数:包含yield关键字的函数就是生成器函数
def func():
for i in range(5):
yield i
generator = func()
print(generator)
for i in range(5):
print(next(generator), end='\t')
- 通过生成器推导式
- python内置函数提供
- 生成器对象的send方法:可以将传入的值变为yield的返回值。示例如下
def autoAnswer():
print('tell me your problems:')
while True:
answer = (yield)
if answer is not None:
if answer.endswith('?'):
print('您问的问题我再想想。')
genertor = autoAnswer()
next(genertor)
genertor.send('你在干嘛?')
genertor.send('吃饭了吗?')
- 应用场景:无需导入所有数据进内存的时候,可以使用生成器每次只提供一个值,减少内存的消耗。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)