Python生成器、迭代器

一、生成器(generator)

通过列表生成式,我们可以直接创建一个列表。但是,受到内存限制,列表容量肯定是有限的。而且,创建一个包含100万个元素的列表,不仅占用很大的存储空间,如果我们仅仅需要访问前面几个元素,那后面绝大多数元素占用的空间都白白浪费了。
所以,如果列表元素可以按照某种算法推算出来,那我们是否可以在循环的过程中不断推算出后续的元素呢?这样就不必创建完整的list,从而节省大量的空间。在Python中,这种一边循环一边计算的机制,称为生成器:generator。当生成器所有的元素被调用完后再使用next()函数会抛出StopIteration异常。
要创建一个generator,有很多种方法。第一种方法很简单,只要把一个列表生成式的[]改成(),就创建了一个generator:

data = (x*x for x in range(10))
print(type(data))
# <class 'generator'>

第二种通过yield来创建生成器

def fibonacci(n):a, b, counter = 0, 1, 0while True:if (counter > n):breakyield aa, b = b, a + bcounter += 1f = fibonacci(10)
print(type(f))
data = []
while True:try:data.append(next(f))except StopIteration:break
print(data)
#<class 'generator'>
#[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55]

二、迭代器(Iterator)

迭代器概述

可以直接作用于for循环的数据类型有以下几种:

一类是集合数据类型,如list,tuple,dict,set,str等;
另一类是generator ,包括生成器和带yeild的generator function,
这些可以 直接作用于for循环的对象统称为可迭代对象:Iterable,
可以被next()函数调用并不断返回下一个值的对象称为迭代器:Iterator,
list,dict,str虽然是Iterable,却不是Iterator。
生成器就是特殊的迭代器。
迭代器可以使用next()、iter()或者.next()、.iter()函数。

data = [1,2,3]
# 使用iter()函数使列表由可迭代对象变成迭代器
it = iter(data)
print(type(it))
# <class 'list_iterator'>
#next(data)
# TypeError: 'list' object is not an iterator
print(next(it))
# 1
print(next(it))
# 2
print(next(it))
# 3
print(next(it))
# StopIteration

Python生成器、迭代器相关推荐

  1. python生成器迭代器_python 生成器 迭代器

    阅读目录 一 递归和迭代 二 什么是迭代器协议 三 python中强大的for循环机制 四 为何要有for循环 五 生成器初探 六 生成器函数 七 生成器表达式和列表解析 八 生成器总结 一 递归和迭 ...

  2. python 生成器 迭代器 区别_Python生成器和迭代器的区别

    What is the difference between iterators and generators? Some examples for when you would use each c ...

  3. python 生成器 迭代器 yiled

    文章来源:http://python.jobbole.com/81911/ https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449 ...

  4. Python 生成器 迭代器

    1.1   生成器 通过列表生成式,我们可以直接创建一个列表.但是,受到内存限制,列表容量肯定是有限的.而且,创建一个包含100万个元素的列表,不仅占用很大的存储空间,如果我们仅仅需要访问前面几个元素 ...

  5. python 生成器迭代器

    列表生成式 要生成[1x1, 2x2, 3x3, ..., 10x10] >>> [x * x for x in range(1, 11)] for循环后面还可以加上if判断 > ...

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

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

  7. python生成器和迭代器作用_浅谈Python中的生成器和迭代器

    迭代器 迭代器协议 对象必须提供一个next方法,执行该方法要么返回迭代中的下一项,要么返回一个异常来终止本次迭代.(只能往前走,不能往后退!) 迭代器对象 遵循了(实现了)迭代器协议的对象.(对象内 ...

  8. python生成器迭代_python中的生成器和迭代器

    前言: 我们来了解一下什么是python中生成器.了解一下python生成器是什么,以及生成器在python编程之中能起到什么样的作用. 定义: 生成器和迭代器 通过列表生成式,我们可以直接创建一个列 ...

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

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

  10. Python的迭代器和生成器

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

最新文章

  1. 独家 | 如何手动优化神经网络模型(附链接)
  2. java和android 语法区别_PET和PTE的区别在哪里?出国留学到底选哪个
  3. boost::mp11::mp_join相关用法的测试程序
  4. THUPCCTSAPIO2019:Far Away
  5. php页面底部信息居中,css底部如何局中?css三种居中方法
  6. cocos2d-x 之 CCProgressTimer
  7. python中 [ 闭包 ] 小结
  8. java jtable导出txt_如何将jtable中的文本数据保存到文件中
  9. Windows服务器:切断默认共享通道七招
  10. CDN的基本概念和产生背景
  11. 博文视点大讲堂第6、7期开课
  12. 《Spring Data实战》——2.2 定义查询方法
  13. C-Free 3.5.2 注册码
  14. python小练习(杂七杂八)
  15. 2021年中国旅游人次、箱包销售收入及利润总额分析[图]
  16. 我注册的163邮箱收信地址格式怎么写?邮箱163注册申请后怎么登录?
  17. 逻辑回归(Logistic Regression)
  18. Clarifai的AI可检测图像和视频中的不合规内容
  19. 公网远程访问内网群晖NAS 6.X【内网穿透】
  20. HDU 威威猫系列故事——篮球梦

热门文章

  1. mysql交表_mysql 交叉表
  2. ai神经网络滤镜安装包,神经网络ai滤镜用不了
  3. AR开发使用Vuforia的ARCamera真实背景相机显示黑屏问题
  4. 通用权限管理系统组件 (GPM - General Permissions Manager) 在跨国直销企业电子商务项目中的成功应用...
  5. 程序设计思维 week8 作业B-猫猫向前冲
  6. 软件项目开发分工贡献占比
  7. 从汇编语言的变化如何,我的脑残粉
  8. select下拉框类型转变
  9. py,pyc,pyw文件的区别和使用
  10. 分类问题 (一) : 基本定义