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

Python基础-迭代器与生成器

作者头像
小团子
发布2019-07-18 11:19:00
2960
发布2019-07-18 11:19:00
举报
文章被收录于专栏:数据云团数据云团

python 是一门编程语言,是一门完全面向对象的编程语言。

前面了解到,可以直接作用于 for 循环的数据类型有下面这几种:

  1. 集合数据类型,比如 list、dict、set、tuple等
  2. generator,包括生成器和带 yield 的 generator function。

上面这些可以直接作用于 for 循环的对象统称为可迭代对象:Iterable。

①迭代器

迭代器对象要求支持迭代器协议的对象,在 python 中,支持迭代器协议就是实现对象的 __iter__() 和 __next__() 方法。

其中 __iter__() 方法返回迭代器对象本身;__next__() 方法返回容器的下一个元素,在结尾时引发 StopIteration 异常。

②生成器 generator

在 python 中,使用生成器可以方便的支持迭代器协议。

生成器通过生成器函数产生,生成器函数可以通过常规的 def 语句来定义,但是不用 return 返回,而是用 yield 一次返回一个结果,在每个结果之间挂起和继续它们的状态,来自动实现迭代协议。

也就是说,yield 是一个语法糖,内部实现支持了迭代器协议,同时 yield 内部是一个状态机,维护着挂起和继续的状态。

生成器函数返回生成器函数。“生成器的迭代器”这个术语通常被称作“生成器”。

要注意的是生成器就是一类特殊的迭代器。作为一个迭代器,生成器必须要定义一些方法,其中一个就是 __next__()。像迭代器一样,可以使用 __next__() 函数来获取下一个值。

在一个 generator function 中,如果没有 return,则默认执行至函数完毕,如果在执行过程中 return,则直接抛出 StopIteration 终止迭代。

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

本文分享自 数据云团 微信公众号,前往查看

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

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

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