生成器

生成器类似返回值为数组的一个函数,这个函数可以接受参数,可被调用,但只能产生一个值,所以大大节省内存。

生成器表达式的语法非常简单,只需要将列表推导式的中括号改成小括号就可以了

 [x+x for x in range(10) if x%2==0]#会打印出整个列表
[0, 4, 8, 12, 16]
 (x+x for x in range(10) if x%2==0)#按某种程序规则存储起来,只隐士的显示出来
<generator object <genexpr> at 0x7fbb230ebe50>

调用生成器的方法也非常简单,用循环直接打出即可,或用next()函数打印单个元素。但是生成器里的对象只能被读取一次,就会从内存中消失。
 g=(x+x for x in range(10) if x%2==0)
for i in g:
print(i)
0
4
8
12
16
尝试第二次打印
 for i in g:
print(i)#因为被读取过,所以打印为空

next()获取

 c=(x+x for x in range(10) if x%2==0)
next(c)

0

 next(c)

4

直到调用最后一个对象之后再用next() 会出现Stopiteration的报错。

迭代器

1、协议是一种约定,可迭代对象实现了迭代器协议,python的内部工具(如for循环,sum,min,max函数等)使用迭代器协议访问对象

(实际for语句的内部实现应该就是首先调用对象的__iter__方法,获取一个迭代器对象,接着不停的调用迭代器对象的__next__方法,循环遍历取值。)

2、可迭代对象:简单来讲可用for循环的对象,如list、dict、set等都是可迭代的对象。

3、迭代器协议是指:对象必须提供一个next方法,执行该方法要么返回迭代中的下一项,要么就引起一个stoplteration报错,最后结束迭代。

4、可迭代对象可通过iter()函数转化成迭代器

 a=iter(list("python"))#用iter(可迭代对象)创建迭代器
a
<list_iterator at 0x7fc9158dbb90>
next(a)
'p'

总结:1、简单来讲能被for作用循环的我们可以视为可迭代的对象(iterable),生成器(generator)、迭代器(iterator)、list、set等都为可迭代的对象。

         2、能被next( )作用的对象我们称之迭代器。我们可知生成器也能被next( )调用,其实生成器是特殊的迭代器。
         3、为什么有些可迭代对象不是迭代器,因为迭代器的实质是数据流,是惰性的,(我自己理解为待推到多米骨诺牌),所以迭代器可以用next()一个个激活其中的对象。
         4、生成器、迭代器、可迭代的对象三者关系可理解为:生成器<迭代器<可迭代的对象

最新文章

  1. MongoVUE1.6.9破解启动提示System.ArgumentException: 字体“Courier New”不支持样式“Regular”
  2. 1Z0-053 争议题目解析346
  3. python学习之——调用adb命令完成移动端界面测试
  4. VS2013 生成安装文件
  5. VS2015 Xamarin for iOS
  6. Unity Sprite切割导出
  7. Python-pycharm
  8. AQS 与 LockSupport
  9. 零基础学习Linux(一)环境搭建
  10. start mysqld on Mac server
  11. J2EE中的HttpSession
  12. mysql 1053错误,无法启动的解决方法
  13. 【学习】在Windows10平台使用Docker ToolBox安装docker(一)
  14. jqGrid选择列控件向右拖拽超出边界处理
  15. 易忽视的Python知识点
  16. 【iCore1S 双核心板_FPGA】例程二:GPIO输入实验——识别按键输入
  17. 【LeetCode每天一题】Search Insert Position(搜索查找位置)
  18. window7安装python的xgboost库方法
  19. Mapreduce入门和优化方案
  20. 在Terminal中的光标的使用技巧

热门文章

  1. js基础练习题(6)
  2. Double值保留两位小数的四种方法
  3. 前端日常工作中常用开发小技巧 ---JavaScript
  4. 记一次WIN10 WLAN消失修复
  5. 阿里云Linux CentOS8.1 64位服务器安装LNMP(Linux+Nginx+MySQL+PHP) 并发调试之Nginx配置
  6. USACO07 MAR Face The Right Way G
  7. H3c实验室-(OSPF,Nat,STP,Dhcp,Acl)v.1)
  8. 使用IDEA创建Spring boot项目,继承mybaits。并进行简单的数据库查询操作
  9. 前端01 /HTML简单简绍
  10. Producter and Consumer