Python 进阶 —— 迭代器与生成器
1. 迭代器
特殊方法__iter__
,是迭代器规则(iterator protocol)的基础。
__iter__
需要返回一个迭代器(iterator),所谓的迭代器就是具有 __next__()
方法(该方法在调用时不需要任何参数)的对象。在调用__next__
方法时,迭代器会返回它的下一个值。如果__next()__
方法被调用,而迭代器没有值可以返回,就会引发一个StopIteration
异常。
class Fibs:def __init__(self):self.a = 0self.b = 1def __next__(self):self.a, self.b = self.b, self.a + self.breturn self.adef __iter__(self):return self
f = Fibs()
for i in f:if i > 1000:breakprint(i)
2. 基本生成器
- 对于生成器(generator)对象,
- Python 2.x:g.next()
- Python 3.x:g.__next()
- 生成器的执行流程,在上次返回的 yield 语句处继续执行;
def gen():i = 0while True:i += 1yield i
for item in gen():print(item)if item >= 10:break
3. 生成器(generator)进阶
创建一个生成器就像创建一个函数一样简单。
我们以一个展开(flatten)嵌套列表(list of lists)为例进行说明:
def flatten(nested):for sublist in nested:for elem in sublist:yield elem
nested = [[1, 2], [3, 4], [5, 6]]
for num in flatten(nested):print(num)
递归生成器
上一节创建的生成器只能处理两层嵌套,问题来了,如果要处理任意层的嵌套怎么办?递归便派上了用场:
def flatten(nested):try:for sublist in nested:for elem in flatten(sublist):yield elemexcept KeyError:yield nested
Python 进阶 —— 迭代器与生成器相关推荐
- python有关迭代器和生成器的面试题_【面试题 | Python中迭代器和生成器的区别?】- 环球网校...
[摘要]今天给大家解答一道Python常见的面试题,希望这个面试栏目,给那些准备面试的同学,提供一点点帮助!小编会从最基础的面试题开始,每天一题.如果参考答案不够好,或者有错误的话,麻烦大家可以在留言 ...
- Python的迭代器和生成器
Python的迭代器和生成器 一.迭代器Iterators 迭代器仅是一容器对象,它实现了迭代器协议.它有两个基本方法: 1)next方法 返回容器的下一个元素 2)__iter__方法 返回迭代器自 ...
- pythonfor循环遍历list_为什么for循环可以遍历list:Python中迭代器与生成器
1 引言 只要你学了Python语言,就不会不知道for循环,也肯定用for循环来遍历一个列表(list),那为什么for循环可以遍历list,而不能遍历int类型对象呢?怎么让一个自定义的对象可遍历 ...
- Python之迭代器和生成器(Day17)
一.可迭代对象(iterable) 刚才说过,很多容器都是可迭代对象,此外还有更多的对象同样也是可迭代对象,比如处于打开状态的files,sockets等等.但凡是可以返回一个迭代器的对象都可称之为可 ...
- python生成器单线程_【Python】迭代器、生成器、yield单线程异步并发实现详解
转自http://blog.itpub.net/29018063/viewspace-2079767 大家在学习python开发时可能经常对迭代器.生成器.yield关键字用法有所疑惑,在这篇文章将从 ...
- Python之迭代器和生成器
生成器和迭代器 提到生成器,总不可避免地要把迭代器拉出来对比着讲,生成器就是一个在行为上和迭代器非常类似的对象,如果把迭代器比作Android系统, 那么生成器就是ios,二者功能上差不多,但是生成器 ...
- python之迭代器,生成器
一,迭代器 1.1什么是可迭代对象? 字符串.列表.元组.字典.集合都可以被for循环,说明他们都是可迭代的. 我们怎么来证明这一点呢? from collections import Iterabl ...
- python 生成式,迭代器,生成器
DAY 6. 生成式,迭代器,生成器 6.1 生成式 6.1.1 列表生成式 list = [index for index in range(10)] 6.1.2 字典生成式 dict = {'zh ...
- 第十六篇 Python之迭代器与生成器
一.迭代器 一. 递归和迭代 生活实例说明什么是递归和迭代 A想去腾达大厦,问B怎么走路,B 说我不知道,我给你问问C,C也不知道,C又去问D,D知道,把路告诉了C,C又告诉B,B最后告诉A, 这就是 ...
最新文章
- 三面蚂蚁金服(交叉面)定级阿里P6
- [ZJOI2005]午餐(贪心+dp)
- TypeScript入门教程 之 类/抽象类/构造器/Getter/Setter
- numpy中方法参数axis取值理解
- 或许是 Nginx 上配置 HTTP2 最实在的教程了
- 【渝粤教育】国家开放大学2018年春季 0179-21T数据库基础与应用 参考试题
- 知识、经验的漏洞还有很多很多
- 反序列化时出现“base-64 字符数组的无效长度”错误提示的解决
- java传智播客答案_传智播客_java基础入门习题答案.docx
- 微信浏览器禁止下载的处理方法-跳转浏览器打开
- 行人重识别论文阅读1-Watching You: Global-guided Reciprocal Learning for Video-based Person Re-identification
- 多元思维模型——全学科及其核心思维模型
- ICTCLAS的JNI调用接口说明
- 相似度系列-6:单维度方法:Evaluating Coherence in Dialogue Systems using Entailment
- RT-Thread 入门学习笔记 - 熟悉$Sub$$main与$Super$$main
- htc android sd卡,【HTC T328W】Android系统中SD卡各文件夹功能详解
- HTML、CSS、JS(JAVA Sprict)
- 崩坏3服务器维护2月8号,新版本上线!《崩坏3》2月8日新版本更新内容一览
- 3d效果图制作傻瓜软件_不会3D软件,也能轻松制作三维效果图!
- 如何提高自己的执行力
热门文章
- 2 snippets vue 修改配置_教你发布vue+.netCore项目到服务器
- Spring+hibernate+JSP实现Piano的数据库操作---4.配置文件
- Hive on Spark与SparkSql的区别
- python更改数据框指定位置的数据_python – 移动数据框列并更改列顺序
- OpenGL ES基本用法
- open cv+C++错误及经验总结(十一)
- 小白python语言基础
- 那个爬虫框架好(简单对比)
- Always On 集群监听创建失败问题
- POJ 1006 同余方程组