迭代器与生成器

可迭代对象:但凡内置有__iter__方法的都是可迭代对象

迭代器:
d1 = d.__iter__()
d1是个迭代器
d1.__next__() 
取下一个值
可以print出来

迭代器对象:内置有__next__方法的,并且内置有__iter__方法的对象
迭代器对象.__next__() 得到下一个值
迭代器对象.__iter__() 得到迭代器本身

文件是迭代器


生成器:
def func():
    yield 1
    yield 2
    yield 5
g = func()
g 是个生成器,generator,是个迭代器,,,

g.__next__()
运行到第一个yield暂停返回

len('www')   __len__()
next(g)    __next__()
iter(可迭代对象)  __iter__()

x = yield 返回值

while True:
    x = yield None
    print('{}'.format(x))

可以一直next
g = func()

g.send('狗吃骨头')
把变量给了x
g.send(None) 相当于next(g)
把程序运行到yield处,必须先有yield才能send

g = dog('a')
g.send(None) # 先把狗叫过来
g.send('骨头') #然后喂东西
g.send('包子')
...

程序挂起,准备好了就运行,等待着值

g.close()
关闭生成器

不能send两个值,可以传一个列表等
将值给了yield,在传给了x,返回的一直 是 111,
传给x,运行,返回值

三元表达式:res = x if 1 > 2 else y
列表生成式:l = [x for x in l if x.startswith('a')]
字典生成式:dic = {key:None for key in keys}
res = {k:v for k,v in items if k != 'gender'}

res = ()
生成生成器,元组不可变

递推
回溯

从回溯最终结果回溯到最初,再从最初的值递推得出最终的结果

posted @   pythoner_wl  阅读(84)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示