当前位置: 首页 > news >正文

python中的迭代器和生成器

一、迭代器

支持迭代的容器,如列表(list)、元组(tuple)、字典(dict)、集合(set)这些序列式容器。

自定义迭代器的类中必须实现以下2个方法:

__next__(self):返回容器的下一个元素。
__iter__(self):该方法返回一个迭代器(iterator)。

除此之外,Python 内置的 iter() 函数也会返回一个迭代器,该函数的语法格式如下:

iter(obj[, sentinel])

其中,obj 必须是一个可迭代的容器对象,而 sentinel 作为可选参数,如果使用此参数,要求 obj 必须是一个可调用对象(__call__)。

二、生成器

特殊的迭代器,与迭代器不同的是,它可以实现在迭代的同时生成元素,而迭代器必须先将所有数据存储到容器中,才能开始迭代

生成器创建方式也比迭代器简单很多:

定义一个以 yield 关键字标识返回值的函数;
调用刚刚创建的函数,即可创建一个生成器。

def intNum():print('开始执行')for i in range(5):yield iprint('继续执行')
num = intNum()  # 成功过创建了一个num生成器对象

和 return 相比,yield 除了可以返回相应的值,还有一个更重要的功能,即每当程序执行完该语句时,程序就会暂停执行。

print(intNum()) 即便调用生成器函数,Python 解释器也不会执行函数中的代码,它只会返回一个生成器(对象)。

要想使生成器函数得以执行,或者想使执行完 yield 语句立即暂停的程序得以继续执行,有以下 2 种方式:

通过生成器(上面程序中的 num)调用 next() 内置函数或者 __next__() 方法
通过 for 循环遍历生成器

# 调用next()内置函数
print(next(num))# 调用__next()__方法
print(num.__next__())# 通过for循环遍历生成器
for i in num:print(i)

 

 除此之外,还可以使用 list() 函数和 tuple() 函数,直接将生成器能生成的所有值存储成列表或者元组的形式。例如:

num = intNum()
print(list(num))num = intNum()
print(tuple(num))

http://www.lryc.cn/news/117921.html

相关文章:

  • Python-OpenCV中的图像处理-图像阀值
  • VB+SQL酒店客房管理设计与实现
  • 【Linux】从0到1实现一个进度条小程序
  • 江南大学轴承数据故障诊断(利用一维CNN进行故障诊断,代码和数据放在压缩包,无需修改任何东西,解压缩后直接运行,有详细注释)
  • 【网络基础实战之路】基于BGP协议连接三个AS区域的实战详解
  • 基于Python爬虫+词云图+情感分析对某东上完美日记的用户评论分析
  • Day 26 C++ list容器(链表)
  • 【深度学习注意力机制系列】—— SKNet注意力机制(附pytorch实现)
  • Markdown语法和表情
  • CSDN编纂目录索引跳转设置
  • cpu的架构
  • FastAPI和Flask:构建RESTful API的比较分析
  • 用康虎云报表打印二维码
  • 网盘直链下载助手
  • 【EI复现】售电市场环境下电力用户选择售电公司行为研究(Matlab代码实现)
  • 并发——何谓悲观锁与乐观锁
  • 【C++】模板
  • 【Echart地图】jQuery+html5基于echarts.js中国地图点击弹出下级城市地图(附完整源码下载)
  • Python AI 绘画
  • mongodb:环境搭建
  • Grafana技术文档--基本安装-docker安装并挂载数据卷-《十分钟搭建》
  • 【Github】Uptime Kuma:自托管监控工具的完美选择
  • linux环形缓冲区kfifo实践3:IO多路复用poll和select
  • SpringBoot系列---【使用jasypt把配置文件密码加密】
  • 大数计算(大数加法/大数乘法)
  • 【腾讯云 Cloud Studio 实战训练营】基于Cloud Studio构建React完成点餐H5页面
  • 杭电多校 Rikka with Square Numbers 费马平方和定理
  • 跟禹神VUE——组件间的通信方式(props配置项、组件间自定义事件、全局事件总线、消息订阅与发布、VUEX)
  • 《2023年中国企业数字化转型发展白皮书》发布
  • 基于Python 简易实现接口测试自动化