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 进阶 —— 迭代器与生成器相关推荐

  1. python有关迭代器和生成器的面试题_【面试题 | Python中迭代器和生成器的区别?】- 环球网校...

    [摘要]今天给大家解答一道Python常见的面试题,希望这个面试栏目,给那些准备面试的同学,提供一点点帮助!小编会从最基础的面试题开始,每天一题.如果参考答案不够好,或者有错误的话,麻烦大家可以在留言 ...

  2. Python的迭代器和生成器

    Python的迭代器和生成器 一.迭代器Iterators 迭代器仅是一容器对象,它实现了迭代器协议.它有两个基本方法: 1)next方法 返回容器的下一个元素 2)__iter__方法 返回迭代器自 ...

  3. pythonfor循环遍历list_为什么for循环可以遍历list:Python中迭代器与生成器

    1 引言 只要你学了Python语言,就不会不知道for循环,也肯定用for循环来遍历一个列表(list),那为什么for循环可以遍历list,而不能遍历int类型对象呢?怎么让一个自定义的对象可遍历 ...

  4. Python之迭代器和生成器(Day17)

    一.可迭代对象(iterable) 刚才说过,很多容器都是可迭代对象,此外还有更多的对象同样也是可迭代对象,比如处于打开状态的files,sockets等等.但凡是可以返回一个迭代器的对象都可称之为可 ...

  5. python生成器单线程_【Python】迭代器、生成器、yield单线程异步并发实现详解

    转自http://blog.itpub.net/29018063/viewspace-2079767 大家在学习python开发时可能经常对迭代器.生成器.yield关键字用法有所疑惑,在这篇文章将从 ...

  6. Python之迭代器和生成器

    生成器和迭代器 提到生成器,总不可避免地要把迭代器拉出来对比着讲,生成器就是一个在行为上和迭代器非常类似的对象,如果把迭代器比作Android系统, 那么生成器就是ios,二者功能上差不多,但是生成器 ...

  7. python之迭代器,生成器

    一,迭代器 1.1什么是可迭代对象? 字符串.列表.元组.字典.集合都可以被for循环,说明他们都是可迭代的. 我们怎么来证明这一点呢? from collections import Iterabl ...

  8. python 生成式,迭代器,生成器

    DAY 6. 生成式,迭代器,生成器 6.1 生成式 6.1.1 列表生成式 list = [index for index in range(10)] 6.1.2 字典生成式 dict = {'zh ...

  9. 第十六篇 Python之迭代器与生成器

    一.迭代器 一. 递归和迭代 生活实例说明什么是递归和迭代 A想去腾达大厦,问B怎么走路,B 说我不知道,我给你问问C,C也不知道,C又去问D,D知道,把路告诉了C,C又告诉B,B最后告诉A, 这就是 ...

最新文章

  1. 三面蚂蚁金服(交叉面)定级阿里P6
  2. [ZJOI2005]午餐(贪心+dp)
  3. TypeScript入门教程 之 类/抽象类/构造器/Getter/Setter
  4. numpy中方法参数axis取值理解
  5. 或许是 Nginx 上配置 HTTP2 最实在的教程了
  6. 【渝粤教育】国家开放大学2018年春季 0179-21T数据库基础与应用 参考试题
  7. 知识、经验的漏洞还有很多很多
  8. 反序列化时出现“base-64 字符数组的无效长度”错误提示的解决
  9. java传智播客答案_传智播客_java基础入门习题答案.docx
  10. 微信浏览器禁止下载的处理方法-跳转浏览器打开
  11. 行人重识别论文阅读1-Watching You: Global-guided Reciprocal Learning for Video-based Person Re-identification
  12. 多元思维模型——全学科及其核心思维模型
  13. ICTCLAS的JNI调用接口说明
  14. 相似度系列-6:单维度方法:Evaluating Coherence in Dialogue Systems using Entailment
  15. RT-Thread 入门学习笔记 - 熟悉$Sub$$main与$Super$$main
  16. htc android sd卡,【HTC T328W】Android系统中SD卡各文件夹功能详解
  17. HTML、CSS、JS(JAVA Sprict)
  18. 崩坏3服务器维护2月8号,新版本上线!《崩坏3》2月8日新版本更新内容一览
  19. 3d效果图制作傻瓜软件_不会3D软件,也能轻松制作三维效果图!
  20. 如何提高自己的执行力

热门文章

  1. 2 snippets vue 修改配置_教你发布vue+.netCore项目到服务器
  2. Spring+hibernate+JSP实现Piano的数据库操作---4.配置文件
  3. Hive on Spark与SparkSql的区别
  4. python更改数据框指定位置的数据_python – 移动数据框列并更改列顺序
  5. OpenGL ES基本用法
  6. open cv+C++错误及经验总结(十一)
  7. 小白python语言基础
  8. 那个爬虫框架好(简单对比)
  9. Always On 集群监听创建失败问题
  10. POJ 1006 同余方程组