Python入门到精通12天(迭代器与生成器)

news2024/11/24 19:39:48

迭代器与生成器

  • 迭代器
  • 生成器

迭代器

迭代器是可迭代的对象,即可以进行遍历的对象。列表、字符串、元组、字典和集合这些都是可迭代的对象,都可以进行遍历。

迭代器是一种访问序列元素的方式,它可以通过next()函数逐个返回序列中的元素。并且所有的迭代器都包含了iter()next()方法,简单来说就是包含了这两种方法的对象都可以被称为迭代器。

迭代器的一个重要特点是,它可以处理任意大小的数据序列,因为它只需要在需要的时候计算下一个计算下一个值,而不必提前将所有的值计算出来。

在之前我们已经学过了for循环,在迭代器中也可以进行使用,for循环实际上是创建了一个迭代器对象,并为每个循环执行next()方法.

这里用列表进行举例说明,代码如下:

# 定义一个列表
list1 = [1, 2, 3, 4]

# 利用iter函数将列表变成迭代器
# 此时就可以用next函数进行取出了
my_iter = iter(list1)
print(next(my_iter))
print(next(my_iter))
print(next(my_iter))
print(next(my_iter))

# 当使用next函数将迭代器中的所有值都取出来之后在进行取出
# 程序就会报错
# print(next(my_iter))  # StopIteration

# 为了防止出现超出它的范围可以使用for循环进行取出
for _ in range(len(list1)):
    print(next(my_iter))

# 同时我们操作迭代器的时候也可以用for循环进行遍历
for i in list1:
    print(i)
    

生成器

生成器是一种特殊的迭代器,他可以通过yield关键字逐个返回值。生成器的函数在调用时不会立即执行,而是返回一个生成器对象。每次调用生成器对象的next()方法时,函数会从上一次yield的位置继续执行,直到遇到下一个yield。yield可以暂停一个函数并返回此时的执行结果,该函数将保存执行环境并在下一次恢复。例举一个斐波那契数列,代码如下:


def fibonacci():
    a, b = 0, 1
    while True:
    # 使用yeild关键字,对a进行生成
    # 遇到yield关键字,循环暂停执行一次
    # 通过next()方法进行取出时,循环继续执行
    # 再次遇到yield,循环再次停止执行
        yield a
        a, b = b, a + b

my_fib = fibonacci()

print(next(my_fib))  # 0
print(next(my_fib))  # 1
print(next(my_fib))  # 1
print(next(my_fib))  # 2
# 此时我们一直取出数据都不会报错
# 因为这是个死循环,有取不完的数据
# 只要你有next()循环便给一个数据

生成器中,如果没有return语句,则执行到函数完毕时将返回StopIteration异常。如果遇到了return语句,则直接抛出StopIteration异常,终止迭代。如果在return后面加上返回的值,则这个值将作为异常的说明。代码如下:

def fibonacci():
    a, b = 0, 1
    while True:
        yield a
        a, b = b, a + b
        if a == 2:
        # 遇到return语句,程序终止执行
        # 返回的结果用于异常说明
            return 1
            
my_fib = fibonacci()
print(next(my_fib))  # 0
print(next(my_fib))  # 1
print(next(my_fib))  # 1
print(next(my_fib))  # 这条语句执行不了,程序遇见了return自动结束

执行结果如下:

在这里插入图片描述

当然我们可以使用close()手动关闭生成器函数,此时如果我们再次进行调用生成器的时候会直接返回StopIteration异常。代码如下:

def fibonacci():
    a, b = 0, 1
    while True:
        yield a
        a, b = b, a + b


my_fib = fibonacci()
print(next(my_fib))
print(next(my_fib))

# 将迭代器进行关闭
my_fib.close()

# 再次取值会返回StopIteration错误
print(next(my_fib))  # StopIteration

以上就是迭代器和生成器的简单介绍,它在我们处理大量数据的时候非常有用,不用将数据全部跑一遍,而是在需要什么数据就拿取数据出来,从而提高速度。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

mybatis3源码篇(1)——构建流程

mybatis 版本:v3.3.0 文章目录 构建流程SqlSessionFactoryBuilderXMLConfigBuildertypeAliasesElementtypeHandlerElementmapperElementMapperRegistry MappedStatementMapperAnnotationBuilderXMLMapperBuilderMapperBuilderAssistant SqlSessionFactorySqlSession…

【录用案例】1区SCI仅36天录用,新增多本1-2区SCI,CNKI评职好刊发表案例

我处上周(2023年4月8日-2023年4月14日)经核实,由我处Unionpub学术推荐的24篇论文已被期刊部录用、20篇见刊,5篇检索: ✔新增1区纳米与环境类SCI&EI,仅36天录用,录用后17天见刊;…

前端canvas截图酷游地址的方法!

前情提要 想在在JavaScript中&#xff0c;酷游专员KW9㍠ㄇEㄒ提供用HTML5的Canvas元素来剪取画面并存成SVG或PNG。 程式写法(一) 首先&#xff0c;需要在HTML中创建一个Canvas元素<canvas id"myCanvas"></canvas> 在JavaScript中&#xff0c;使用canv…

【Java面试】ArrayList、LinkedList 查找数据哪个快

ArrayList、LinkedList查找数据哪个快 这里有几种不同情况 1、是不是有序的&#xff1f; 2、说的查找是什么意思&#xff1f;是调用get(1)&#xff0c;还是调用的contains(o)方法&#xff1f; 根据上面的问题&#xff0c;我们可以分开讨论&#xff1a; 1、数据是有序的 指定…

Apifox自动生成接口文档

1、安装 1.1 Apifox安装 官方文档&#xff1a;Apifox - API 文档、调试、Mock、测试一体化协作平台 - 接口文档工具&#xff0c;接口自动化测试工具&#xff0c;接口Mock工具&#xff0c;API文档工具&#xff0c;API Mock工具&#xff0c;API自动化测试工具 1.2 IDEA 插件安装…

Vue 复学 之 状态管理 Vuex

Vuex是vue中的一种状态管理模式&#xff0c;就是一个 状态仓库&#xff0c;仓库做什么&#xff1f;存储状态、管理状态&#xff08;数据&#xff09;的变化、提供状态获取窗口。 本文中一些测试用例基于vue/composition-api1.7.1 &#xff0c; vuex3.6.2&#xff0c; vue2.6.1…

【unity实战】随机地下城生成1——随机生成地下城初稿(含源码)

先看看实现的最终效果 #用到的素材 https://download.csdn.net/download/qq_36303853/87712757 导入素材 导入房间图片素材,配置图片信息信息 点击sprite Editor,开始切割图片 随机创建基本房间 已一个白底图片模拟房间预设体 思路:建立一个空的 GameObject 用来做…

C++中的STL容器

文章目录 一、序列式容器1.vector2.array3.deque4.list5.forward_list 二、关联式容器1.set、multiset、unordered_set和unordered_multiset2.map、multimap、unordered_map和unordered_multimap STL中的容器将一些应用最为广泛的数据结构实现了出来&#xff0c;它主要分为序列…

使用python下载wallpaper Engine订阅的壁纸/视频

一、为什么想下载wallpaper Engine的壁纸 在游戏平台steam上&#xff0c;有一个壁纸软件wallpaper Engine&#xff0c;人称小红车&#xff0c;里面有各种好看的动态壁纸和视频&#xff0c;可以给我们的电脑设置动态桌面&#xff0c;非常好用。   用过几次后&#xff0c;我有了…

Doris(14):索引

1 概念 索引用于帮助快速过滤或查找数据。 目前 Doris 主要支持两类索引&#xff1a; 内建的智能索引&#xff0c;包括前缀索引和ZoneMap索引用户创建的二级索引&#xff0c;包括Bloom Filter索引和Bitmap倒排索引。 前缀索引&#xff1a;即在排序的基础上&#xff0c;实现的…

kv server(配置以及性能测试)

首先在 Cargo.toml 里添加 serde 和 toml。我们计划使用 toml 做配置文件&#xff0c;serde 用来处理配置的序列化和反序列化&#xff1a; [dependencies] ... serde { version "1", features ["derive"] } # 序列化/反序列化 ... toml "0.5"…

antd表格a-table滚动失效。x轴滚动失效

目录 antd表格a-table滚动失效。x轴滚动失效 页面html代码如下。实现左右布局&#xff0c;左边侧边栏固定宽度&#xff0c;右边沾满剩余宽度 解决方案&#xff1a;在计算右侧宽度时&#xff0c;左边侧边栏固定宽度&#xff0c;右边沾满剩余宽度 情况1&#xff1a;左侧侧边栏…

第八章 查询和检索:Query DSL

版权声明 本文为Elastic开源社区版权所有,保证独立性和原创性,未获得授权和允许,任何组织和个人不得以任何方式传播或复制或分享。否则必将追究法律责任。 知识内容输出不易,请尊重他人劳动成果。严禁随意传播、复制和盗用他人成果或文章内容用以商业或盈利目的! 1、查询…

5.4 龙贝格算法

为什么有龙贝格算法&#xff1a; 龙贝格算法是一种数值积分方法&#xff0c;用于计算定积分的数值近似值。它是基于复合梯形法和复合辛普森法的推广和拓展&#xff0c;可以达到更高的精度。相较于复合梯形法和复合辛普森法&#xff0c;龙贝格算法的收敛速度更快&#xff0c;且…

nerfstudio介绍及在windows上的配置、使用

nerfstudio提供了一个简单的API&#xff0c;可以简化创建、训练和可视化NeRF的端到端过程。该库通过模块化每个组件来支持可解释的NeRF实现。nerfstudio源码地址: https://github.com/nerfstudio-project/nerfstudio , 通过模块化集成了多个NeRF扩展的实现&#xff0c;持续更新…

JUC-多线程(12. AQS)学习笔记

文章目录 1. 可重入锁1.1. 概述1.2. 可重入锁类型1.3. Synchronized 可重入实现机理 2. LockSupport2.1. LockSupport 是什么2.2. 3种线程等待唤醒的方法2.2.1 Object 的等待与唤醒2.2.2. Condition接口中的等待与唤醒2.2.3. 传统的 synchronized 和 Lock 实现等待唤醒通知的约…

C/C++开发,opencv读写图像与视频

目录 一、opencv的图像缓存表达&#xff08;cv::mat&#xff09; 二、图片读写 2.1 图片读写API 2.2 图片读写案例 2.3 案例编译与测试 三、opencv的视频读写&#xff1a; 3.1 视频读写接口 3.2 视频读写案例 3.3 编译与测试 一、opencv的图像缓存表达&#xff08;cv::mat&am…

2023网络搭建项目改革

好久没更新了&#xff0c;哈哈哈&#xff0c;也废话不多说&#xff0c;直接进入正题。 3月的时候就有人吓我说什么网搭取消了&#xff0c;当时我还觉得高兴&#xff0c;主要是不喜欢这个行业&#xff0c;要是没了我就可以跑路了&#xff0c;哈哈&#xff0c;然后我就觉得很奇怪…

【嵌入式系统与入门】Day02 Arduino 按键、蜂鸣器与湿温度传感器

文章目录 1. 按键控制1.1 认识按键1.2 工作原理1.3 Arduino代码展示1.4 原理图1.5 实现去抖【消抖动延时】 2. 蜂鸣器控制2.1 认识蜂鸣器2.2 分类2.3 工作原理2.4 连线2.5 Arduino代码展示 3. PWM模拟量输出3.2 Arduino代码展示 4. 湿温度测量4.1 认识器件4.2 传感器接口4.3 Ar…

CMU-自主探索导航系统(TARE FAR Planner)学习-All in one

参考引用 Autonomous Exploration Development EnvironmentTARE机器人自主导航系统社区-CSDN社区云TARE机器人自主导航系统公开课1TARE机器人自主导航系统公开课2CMU团队开发的全套开源自主导航算法FAR Planner —— IROS2022 最佳学生论文&#xff1c;论文阅读&#xff1e;TAR…