Python学习笔记第十一天(迭代器与生成器)

2023-10-31

迭代器与生成器

迭代器

迭代是Python最强大的功能之一,是访问集合元素的一种方式。

迭代器是一个可以记住遍历的位置的对象。

迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退。

迭代器有两个基本的方法:iter()next()

字符串,列表或元组对象都可用于创建迭代器。

# 实例 1
list=[1,2,3,4]
it = iter(list)    # 创建迭代器对象  
print (next(it))   # 输出迭代器的下一个元素

迭代器对象可以使用常规for语句、while语句等进行遍历。

# 实例 2
list=[1,2,3,4] 
it = iter(list) # 创建迭代器对象 
for x in it: 
    print (x, end=" ")

StopIteration

StopIteration 异常用于标识迭代的完成,防止出现无限循环的情况,在 next() 方法中我们可以设置在完成指定循环次数后触发 StopIteration 异常来结束迭代。

在 20 次迭代后停止执行。

# 实例 3
class MyNumbers:
    def __iter__(self):
        self.a = 1
        return self
    def __next__(self):
        if self.a <= 20:
            x = self.a
            self.a += 1 
            return x 
        else: 
            raise StopIteration 
myclass = MyNumbers()
myiter = iter(myclass) 
for x in myiter:
    print(x)

生成器

在 Python 中,使用了 yield 的函数被称为生成器(generator)。

跟普通函数不同的是,生成器是一个返回迭代器的函数,只能用于迭代操作,更简单点理解生成器就是一个迭代器。

在调用生成器运行的过程中,每次遇到 yield 时函数会暂停并保存当前所有的运行信息,返回 yield 的值, 并在下一次执行 next() 方法时从当前位置继续运行。

调用一个生成器函数,返回的是一个迭代器对象。

以下实例使用 yield 实现斐波那契数列。

# 实例 4
import sys 
def fibonacci(n): # 生成器函数 - 斐波那契 
    a, b, counter = 0, 1, 0 
    while True: 
        if (counter > n): 
        return 
        yield a 
        a, b = b, a + b 
        counter += 1 
f = fibonacci(10) # f 是一个迭代器,由生成器返回生成
while True:
    try: 
        print (next(f), end=" ")
    except StopIteration: 
        sys.exit()

结束语

今天学习的是Python迭代器与生成器学会了吗。 今天学习内容总结一下:

  1. 迭代器
  2. StopIteration
  3. 生成器
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python学习笔记第十一天(迭代器与生成器) 的相关文章

  • pywinauto 32位用户警告

    我正在尝试使用 pywinauto 在每次更新类文件时自动启动和停止 TomCat 但是 当我尝试运行它时 它会给出以下警告 UserWarning 32 bit application should be automated using
  • tensorflow Protobuf编译问题

    我想为 google 对象检测 API 编译 protobuf 库 我按照官方教程输入protoc object detection protos proto python out 然后我得到的是 object detection prot
  • 只使用 Django 的某些部分?

    我喜欢 Django 但对于一个特定的应用程序 我只想使用它的一部分 但我对 Django 的内部工作原理还不够熟悉 所以也许有人可以指出我必须做什么的正确方向查看 具体来说 我想使用 模型和数据库抽象 The 缓存API http doc
  • 如何将本机 popcount 与 numba 一起使用

    我正在使用 numba 0 57 1 我想在我的代码中利用本机 CPU popcount 我现有的代码太慢 因为我需要运行它数亿次 这是一个 MWE import numba as nb nb njit nb uint64 nb uint6
  • 如何为 Intellij/PyCharm 设置 PYTHONSTARTUP 脚本

    我尝试添加PYTHONSTARTUP环境变量 我还尝试了自定义启动脚本 但更令人惊讶的是 这also没有工作 npa别名无法识别 出于一点绝望 我什至尝试添加到interpreter options 那什么也没做 实际上是什么Interpr
  • Python grpc protobuf 存根生成问题:--grpc_out: protoc-gen-grpc: 插件失败,状态代码 1

    正如问题所说 我从源代码编译了 grpc 并且也做了sudo pip install grpcio 但是 那which grpc python plugin不返回任何内容 这是一个问题 因为route guide的grpc python示例
  • Spyder 导入模块出错

    我正在尝试在 Spyder 中使用 sklearn 一开始 当我尝试导入它时 我收到 ImportError No module named sklearn 然后我用 PYTHONPATH 管理器设置 PATH 然后使用工具菜单中的 更新模
  • 如何使用 HTTP 标头发送非英语 unicode 字符串?

    我是 HTTP 相关问题的新手 我的问题是在 iOS 开发中 我想使用 HTTP 标头发送一个字符串 所以我使用 httpRequest setValue nonEnglishString forHTTPHeaderField custom
  • Windows Defender 检测 Python EXE 为木马

    我制作了一个 Python 脚本 将 Windows 目录以 zip 形式邮寄给我 我使用 sched 模块添加了一个调度程序 每小时重复一次 我试图制作一个简单的同步应用程序供个人使用 在 Windows 启动时启动 我使用将其转换为 e
  • 类型错误:需要 Future 或协程

    我尝试在 asyncssh 上自动重新连接 ssh 客户端 SshConnectManager 必须留在后台并在需要时进行 ssh 会话 class SshConnectManager object def init self host u
  • 如何在Python中求和

    我想知道如何在 python 中表示总和而不需要像这样的循环here http docs scipy org doc scipy reference tutorial optimize html 我们有 def rosen x The Ro
  • python-polars 通过分隔符将字符串列拆分为许多列

    在 pandas 中 以下代码会将 col1 中的字符串拆分为许多列 有没有办法在极地做到这一点 d col1 a b c d a b c d df pd DataFrame data d df a b c d df col1 str sp
  • 读取文件特定行号的有效方法。 (奖励:Python 手册印刷错误)

    我有一个 100 GB 的文本文件 它是来自数据库的 BCP 转储 当我尝试导入它时BULK INSERT 我在第 219506324 行上收到一个神秘错误 在解决此问题之前 我想看看这一行 但可惜的是我最喜欢的方法 import line
  • 如何在 Pytorch 中将一维 IntTensor 转换为 int

    如何将一维 IntTensor 转换为整数 这 IntTensor int 给出错误 KeyError Variable containing 423 torch IntTensor of size 1 我所知道的最简单 最干净的方法 In
  • 如何绘制多类分类器的精度和召回率?

    我正在使用 scikit learn 我想绘制精度和召回曲线 我正在使用的分类器是RandomForestClassifier scikit learn 文档中的所有资源都使用二元分类 另外 我可以绘制多类的 ROC 曲线吗 另外 我只找到
  • 如何在 Sublime 2 REPL Mac 中运行 Python 3

    我的问题如下 我安装了 sublime 2 和 sublime repl 插件 一切正常 我唯一需要的是更改在控制台内置的 sublimerepl 上运行的 python 版本 我的意思是 我有 python 2 7 5 预先安装了 mav
  • Python:帮助(numpy)在退出时导致段错误

    我遇到了一个奇怪的现象 在 python 解释器中 我执行以下操作 gt gt gt import numpy gt gt gt help numpy 帮助显示正确 但一旦我按 q 返回解释器 Segmentation fault core
  • Scrapy的redirect_urls异常.KeyError

    我是 Scrapy 和 Python 的新手 最近推出了我的第一个蜘蛛 有一个功能似乎以前有效 但现在它只适用于我试图废弃的一些网站 代码行是 item url direct response request meta redirect u
  • 如何限制scrapy请求对象?

    所以我有一个蜘蛛 我认为它正在泄漏内存 结果当我检查 telnet 控制台 gt gt gt prefs 时 它只是从链接丰富的页面中抓取了太多链接 有时它会超过 100 000 个 现在我已经一遍又一遍地浏览文档和谷歌 但我找不到一种方法
  • 如何保持 python 3 脚本 (Bot) 运行

    不是母语英语 抱歉 英语可能很蹩脚 我也是编程新手 您好 我正在尝试使用 QueryServer 连接到 TeamSpeak 服务器来创建机器人 经过几天的努力 它有效 只有 1 个问题 而我却被这个问题困扰了 如果您需要检查 这是我正在使

随机推荐

  • ChatGPT写作提示词指令大全

    1 用ChatGPT写影评 指令 你是一个自媒体人 同时也是一个专业的影评人 最近熬夜看完了韩剧黑暗荣耀第一季和第二季 忍不住想在公众号分享给粉丝们 请写一篇1000字左右的自媒体文章 并且加上一个有吸引力的标题 指令模板 你是一个自媒体人
  • 使用腾讯云 GPU 学习深度学习系列

    https cloud tencent com developer article 1005199
  • 模拟电路设计(17)---典型RC正弦波振荡器

    RC正弦波振荡器 采用LC器件作为振荡电路的反馈网络可以达到很高的输出频率 器件比较容易实现小体积 但是要求振荡器输出几十或者几百Hz信号时 LC器件的取值会很大 很难实现实用的产品 此时采用RC选频网络就会有很大的优势 RC LC反馈振荡
  • C#:Xxxx.GetTypes()引发了类型“System.Reflection.ReflectionTypeLoadException”的异常

    参考 Xxxx GetTypes 引发了类型 System Reflection ReflectionTypeLoadException 的异常 Nemo的笔记本 CSDN博客
  • 用户界面与业务逻辑的分离

    前面分别实现了计算器程序的用户界面和业务逻辑 基本程序架构一般包含 用户界面模块 UI 接受用户输入及呈现数据 业务逻辑模块 Business Logic 根据用户需求处理数据 基本设计原则 功能模块之间需要进行解耦 核心思想 强内聚 弱耦
  • 以太坊开发框架——Truffle的基础使用

    这里写目录标题 Truffle Truffle 简介 Truffle 的客户端 安装Truffle 创建项目 Migration artifacts require exports 的函数 deployer 对象 更新 migration
  • TCP三次握手

    TCP三次握手的原因 双方都确认对方具有接收和发送数据的功能 1 初始状态 双方都处于Closed状态 2 服务器开启监听功能 处于Listen状态 3 第一次握手 客户端发起请求 发送一个SYN标识 连接请求数据包 seq x 并处于SY
  • vue 树形结构数据的便捷遍历,及树形结构与平级列表的相互转换(使用xe-utils函数)

    一 使用xe utils函数 xe utils 的api地址 xe utils 函数库 工具类 二 安装 npm安装 npm install xe utils 引用 import XEUtils from xe utils 1 mapTre
  • 数据结构(使用静态数组实现顺序表)

    一 定义 1 线性表 1 线性表的定义 逻辑结构 具有相同数据类型的n n gt 0 的有限个数的数据元素的有序排列 2 线性表的运算 操作 创建销毁 增删改查 3 线性表的存储结构 顺序存储 产生了顺序表 链式存储 产生了链表 2 顺序表
  • 华为云服务器怎么传文件,在云服务器终端里面怎么传文件

    在云服务器终端里面怎么传文件 内容精选 换一换 已获取该弹性云服务器的密钥文件 弹性云服务器已经绑定弹性IP地址 已配置安全组入方向的访问规则 如果您是在Windows操作系统上登录Linux 可以按照下面方式登录弹性云服务器 我们以PuT
  • 数据结构——单调栈

    单调栈 定义 单调递增栈 单调递增栈就是从栈底到栈顶数据是从小到大 单调递减栈 单调递减栈就是从栈底到栈顶数据是从大到小 实现 以单调递增栈为例 向栈中推入元素时 如果栈顶元素比当前元素大 则将栈顶元素推出 直到栈顶元素比当前元素小或者栈为
  • IDEA新建项目时,没有Spring Initializr选项(亲测有效)

    最近开始使用IDEA作为开发工具 然后也是打算开始学习使用spring boot 看着博客来进行操作上手spring boot 很多都是说 创建一个新项目 Create New Project 选择 Spring Initializr 然而
  • 全网最全jupyter安装与使用教程

    jupyter的安装与使用 注 我主要使用的是windows系统 其余的也不太了解 不过这篇文章可以解决大部分问题 部分图片过大 建议打开网址 简介 Jupyter Notebook是基于网页的用于交互计算的应用程序 简而言之 Jupyte
  • c++输出字符数组出现汉字乱码(包含用for循环输入字符数组再输出数组,出现汉字乱码)

    原因在于字符数组里存放内容没有字符结束标志 0 例子1 没有 0 include
  • c#翻页效果

    用c 和GDI 实现杂志翻页动画效果时间 2010 01 13 blog csdn net 周公 说明 以前本人参与个一个电子杂志项目 当时要求实现模拟现实生活中的杂志翻页动画效果 别人推荐了这篇文章 最后达到了我想要的效果 今天尝试把这篇
  • 漫谈-Weblogic-CVE-2020-2555

    背景 2020年1月 互联网上爆出了weblogic反序列化远程命令执行漏洞 CVE 2020 2555 Oracle Fusion中间件Oracle Coherence存在缺陷 攻击者可利用该漏洞再未授权情况下通过构造T3协议请求 获取w
  • 软件测试面试题:HTTP和HTTPS协议区别?

    HTTP和HTTPS协议区别 https协议需要到CA Certificate Authority 证书颁发机构 申请证书 一般免费证书较少 因而需要一定费用 http是超文本传输协议 信息是明文传输 Https协议是由SSL和Http协议
  • 6 种易于上手的编程副业,每月赚取 1,000 多美元——没有废话

    没有自由职业者或博客 也不需要前期费用 你们中的大多数人阅读这样的故事是希望其中的一些故事能帮助您赚更多的钱 好吧 几年前我还是同一个人 我希望尝试一些新的副业并赚点钱 其中一个视频建议我在网上写作 此后我写了很多技术文章 在此过程中 我开
  • react结合js获取屏幕鼠标滚动等距离实现页面懒加载

    懒加载 也叫延迟加载 指的是在长网页中延迟加载内容或图像 是一种很好优化网页性能的方式 在滚动屏幕之前 可视化区域之外的内容不会进行加载 在屏幕滚动距离底部到一定距离时才加载 这样网页的加载速度更快 减少了服务器的负载 懒加载适用于图片较多
  • Python学习笔记第十一天(迭代器与生成器)

    Python学习笔记第十一天 迭代器与生成器 迭代器 StopIteration 生成器 结束语 迭代器与生成器 迭代器 迭代是Python最强大的功能之一 是访问集合元素的一种方式 迭代器是一个可以记住遍历的位置的对象 迭代器对象从集合的