Python之生成器、迭代器
2024-10-09 08:25:31
生成器
生成器类似返回值为数组的一个函数,这个函数可以接受参数,可被调用,但只能产生一个值,所以大大节省内存。
生成器表达式的语法非常简单,只需要将列表推导式的中括号改成小括号就可以了
[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、生成器、迭代器、可迭代的对象三者关系可理解为:生成器<迭代器<可迭代的对象
最新文章
- MongoVUE1.6.9破解启动提示System.ArgumentException: 字体“Courier New”不支持样式“Regular”
- 1Z0-053 争议题目解析346
- python学习之——调用adb命令完成移动端界面测试
- VS2013 生成安装文件
- VS2015 Xamarin for iOS
- Unity Sprite切割导出
- Python-pycharm
- AQS 与 LockSupport
- 零基础学习Linux(一)环境搭建
- start mysqld on Mac server
- J2EE中的HttpSession
- mysql 1053错误,无法启动的解决方法
- 【学习】在Windows10平台使用Docker ToolBox安装docker(一)
- jqGrid选择列控件向右拖拽超出边界处理
- 易忽视的Python知识点
- 【iCore1S 双核心板_FPGA】例程二:GPIO输入实验——识别按键输入
- 【LeetCode每天一题】Search Insert Position(搜索查找位置)
- window7安装python的xgboost库方法
- Mapreduce入门和优化方案
- 在Terminal中的光标的使用技巧
热门文章
- js基础练习题(6)
- Double值保留两位小数的四种方法
- 前端日常工作中常用开发小技巧 ---JavaScript
- 记一次WIN10 WLAN消失修复
- 阿里云Linux CentOS8.1 64位服务器安装LNMP(Linux+Nginx+MySQL+PHP) 并发调试之Nginx配置
- USACO07 MAR Face The Right Way G
- H3c实验室-(OSPF,Nat,STP,Dhcp,Acl)v.1)
- 使用IDEA创建Spring boot项目,继承mybaits。并进行简单的数据库查询操作
- 前端01 /HTML简单简绍
- Producter and Consumer