前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python可迭代对象、迭代器、生成器

Python可迭代对象、迭代器、生成器

作者头像
计算机与AI
发布2020-11-19 14:48:44
6640
发布2020-11-19 14:48:44
举报
文章被收录于专栏:计算机与AI

本文为同学们讲解Python中可迭代对象、迭代器与生成器的相关内容。

首先看三个特殊方法(循环时自动调用)

  • __iter__():返回一个迭代器对象。
  • __next__():从容器中返回下一项。如果已经没有项可返回,则会引发 StopIteration 异常
  • __getitem__:实现 self[key] 的求值。对于序列类型,接受的键应为整数和切片对象

一、可迭代对象:能够逐个返回成员的对象

可迭代对象大致包含以下种类

  1. 序列(如字符串、列表、元组等)
  2. 非序列(如集合、字典、文件对象等)
  3. 类对象 定义了__iter__()方法
  4. 类对象 定义了序列功能的__getitem__()方法
  5. 迭代器 定义了__iter__() 和 __next__() 方法

备注说明:

  • 程序运行会先把 可迭代对象生成一个迭代器(iter(可迭代对象)),然后再进行一次性遍历
  • 在使用可迭代对象时,通常情况不需要我们自己来生成迭代器(iter(可迭代对象))
  • for循环或其他内置函数会自动生成一个迭代器进行遍历

使用情况:

  1. for in 循环
  2. enumerate()、zip()、map()、filter()等需要序列作为参数的地方

容器(序列、非序列)

类对象 __iter__()

类对象 __getitem__()

二、迭代器:表示一连串数据流对象,重复调用__next__()方法,逐个返回数据流中的成员

迭代器大概有两种类型

  1. 必须具有 __iter__() 方法,用来返回该迭代器对象自身。必须具有 __next__() 方法,从容器中返回下一项。
  2. 生成器 函数中有yield表达式

备注说明:

  • 当没有数据可用时,则将引发 StopIteration 异常
  • for循环或其他内置函数进行遍历取值时,会自动处理异常,正常结束遍历

迭代器自定义实现

三、生成器:实现迭代器的便捷方式。通过yield表达式实现

yield表达式不再详细介绍,详细了解yield运行方式,可点击【对照return讲解yield】文章

  1. 处理非常大的数据集合时,生成器非常有用
  2. yield表达式,只有定义生成器函数时,才会使用
  3. 生成器中的成员并不存在,使用一个成员立刻用yield生成一个成员(按需计算)
  4. 生成器很节省内存,因为是立刻生成的,所以耗费CPU进行计算
  5. 列表、字典等,成员是在内存中,使用时只是从内存中取出来,所以占用内存,不耗费CPU

生成器的两种形式:

  • 1.生成器表达式:类似列表推导式

列表推导式详细可点击【列表推导式及演变姿势】

其句法与推导式相同,区别在于它是用圆括号而不是用方括号或花括号括起来

生成器表达式

  • 2.自定义生成器:通过yield来自己定义(包含3种模板)
  • 2.1 yield value 配合next() 使用(典型生成器)

典型生成器

  • 2.2 yield value 配合 for循环使用(常用生成器)

常用生成器

  • 2.3 v=yield value 配合send(value)使用(协程函数)

关于协程以后讨论,协成的底层就是生成器

下面示例大家都称为 生产者消费者模型

强调一下 v=yield value 的执行方式:

先yield value返回value,暂停。生成器外面遇到send回到生成器执行n=value赋值,继续执行到yield value返回value后,再暂停


转载自今日头条python一看便懂。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-11-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 计算机与AI 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档