Python迭代器与生成器

文章目录

  • 迭代器
    • 创建迭代器
    • StopIteration
  • 生成器

迭代器

访问集合元素的一种方式,可以记住遍历的位置的对象
从集合的第一个元素开始,直到所有的元素被访问完结束,迭代器只能往前不会后退

iter(),创建迭代器对象

iter(object, [sentinel])
object,迭代的集合如果有第二个参数,第一个参数必须是可调用对象。
iter创建迭代器对象后,每次调用__next__()方法都会调用object

next(),输出迭代器的下一个元素,要和iter()一起使用

next(iterable, [default])
iterable,可迭代对象default,可选参数,设置没有下一元素是返回的默认值,不设置的话没有下一参数时会发出`StopIteration`异常
list = [1, 2, 3, 4]
li = iter(list)
print(next(li))
for i in li:print(i, end=' ')

在这里插入图片描述

创建迭代器

class MyNumbers:def __iter__(self):self.a = 1return selfdef __next__(self):x = self.aself.a += 1return xmyclass = MyNumbers()
myiter = iter(myclass)# next只输出一个元素,for循环会无限循环下去
# print(next(myiter))
for i in myiter:print(i)

StopIteration

标识迭代的完成,防止无限循环
for 循环中无需处理 StopIteration 异常,循环会正常结束

class MyNumbers:def __iter__(self):self.a = 1return self# 20次迭代后停止def __next__(self):if self.a <= 20:x = self.aself.a += 1return xelse:raise StopIterationmyclass = MyNumbers()
myiter = iter(myclass)for x in myiter:print(x)

生成器

使用yield函数的称为生成器,结果返回迭代器,只能用于迭代操作
yield指路https://www.runoob.com/w3cnote/python-yield-used-analysis.html

def fab(max): n, a, b = 0, 0, 1 while n < max: print b a, b = b, a + b n = n + 1
fab(5)

缺少复用性,无法获得生成序列

class Fab(object):def __init__(self, max):self.max = maxself.n, self.a, self.b = 0, 0, 1def __iter__(self):return selfdef __next__(self):if self.n < self.max:r = self.bself.a, self.b = self.b, self.a + self.bself.n = self.n + 1return rraise StopIteration()
for n in Fab(5):print(n)

利用iterable,内存占用始终为常数,但不简洁

def fab(max): n, a, b = 0, 0, 1 while n < max: yield b      # 使用 yield# print b a, b = b, a + b n = n + 1
for n in fab(5): print n

利用yield来获取iterable效果,保持简洁

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/26343.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

matlab滤波器设计-IIR滤波器的设计与仿真

matlab滤波器设计-IIR滤波器的设计与仿真 1 引言 在现代通信系统中&#xff0c;由于信号中经常混有各种复杂成分&#xff0c;所以很多信号的处理和分析都是基于滤波器而进行的。但是&#xff0c;传统的数字滤波器的设计使用繁琐的公式计算&#xff0c;改变参数后需要重新计…

AlienSwap 首期 Launchpad — 粉丝偶像女团 NFT+RWA 的创新探索

NFT 是整个加密市场一致看好&#xff0c;并认为会继续爆发的领域。随着更多的 NFT 平台和 NFT 项目的推出&#xff0c;NFT 市场的格局也在不断变化。从开始的 OpenSea 占据领先地位&#xff0c;到 Blur 的横空出世风头无两&#xff0c;在加密领域&#xff0c;局势更迭总是在不经…

Hive自定义函数

本文章主要分享单行函数UDF&#xff08;一进一出&#xff09; 现在前面大体总结&#xff0c;后边文章详细介绍 自定义函数分为临时函数与永久函数 需要创建Java项目&#xff0c;导入hive依赖 创建类继承 GenericUDF&#xff08;自定义函数的抽象类&#xff09;&#xff08;实现…

如何通过Pytest的插件,轻松切换自动化测试的环境地址?

前言 前面小编介绍了如何通过Pytest的插件来实现自动化测试的环境的切换&#xff0c;当时使用的方法是通过钩子函数进行获取命令行参数值&#xff0c;然后通过提前配置好的参数进行切换测试环境地址。 今天小编再次介绍一种方法&#xff0c;通过Pytest的插件&#xff1a;pyte…

谷歌Bard更新中文支持;GPT-4:1.8万亿参数、混合专家模型揭秘; Meta推出商用版本AI模型

&#x1f989; AI新闻 &#x1f680; 谷歌的AI聊天工具Bard更新&#xff0c;增加中文支持 摘要&#xff1a;谷歌的AI聊天工具Bard新增中文环境&#xff0c;用户可以使用简体和繁体中文进行交流。然而&#xff0c;与竞品相比&#xff0c;Bard的回复略显生硬&#xff0c;语义理…

Redis深入——管道、发布订阅、主从复制、哨兵监控和集群

前言 在前面的学习中&#xff0c;我们已经了解了Redis的基本语法以及Redis持久化和事务的概念。而在这篇文章中我们继续来梳理管道、发布订阅、主从复制、哨兵监控和集群的知识&#xff0c;理解Redis主从复制到集群分片的演进过程&#xff0c;希望对正在学习的小伙伴有一定的帮…

关于学习过程中的小点

nfev : 函数求值次数njev : Jacobian 评估的数量nit :算法的迭代次数 permute(dims)#维度转换 torch.split #[按块大小拆分张量] Pytorch.view Pytorch中使用view()函数对张量进行重构维度&#xff0c;类似于resize()、reshape()。用法如下&#xff1a;view(参数a,参数b,...)&a…

Boojum:zkSync的高性能去中心化STARK证明系统

1. 引言 2023年7月17日zkSync官方twitter Say hello to Boojum宣称在不regenesis的情况下&#xff0c;将zkSync Era迁移至Boojum证明系统。 Boojum为STARK证明系统&#xff08;PlonkFRI&#xff09;&#xff0c;开源代码见&#xff1a; https://github.com/matter-labs/era-…

Python爬虫学习笔记(三)————urllib

目录 1.使用urllib来获取百度首页的源码 2.下载网页图片视频 3.总结-1 4.请求对象的定制&#xff08;解决第一种反爬&#xff09; 5.编解码 &#xff08;1&#xff09;get请求方式&#xff1a;urllib.parse.quote&#xff08;&#xff09; &#xff08;2&#xff09;get请求…

微信小程序用户登录及头像昵称设置教程(前后端)

目录 1.背景分析 2.具体需求分析 3.前端设计 3.1 用户登录 3.2 头像昵称填写&#xff08;个人信息界面&#xff09; 4.后端设计 4.1项目架构分析 4.2 代码分析 实体类 dao层 service层 controller层 工具类 5.nginx部署 6.效果演示 1.背景分析 众所周知&#x…

拒绝无效内卷|*CTF 2023邀你一起hack for fun!

注意 ⚠️ 2023年07月29日 *CTF 2023携重磅赛题惊喜来袭 请求加入你的假期计划&#xff01; 7月29日09:00-30日09:00 CTF 2023 再度回归 由复旦大学*****战队倾力打造 赛题一如既往质量与趣味并存 知识量与时效性双高 结合时下最新安全漏洞 专注底层逻辑思考 注重知识点本身 …

四阶龙格-库塔方法matlab程序与误差对比

四阶龙格-库塔方法matlab程序与误差对比 简介参考code四阶龙格-库塔函数微分方程函数主程序 结果分析 简介 本例子函数参考了【1】中的函数&#xff0c;增加了解析方法的函数与四阶龙格-库塔方法对比&#xff0c;并计算了百分比误差&#xff0c;最大误差在0.3%左右。 参考 【…