Python练习-生成器、迭代器-2018.12.01
2024-08-20 01:27:16
如果列表元素可以按照某种算法推算出来,可以在循环的过程中不断推算出后续的元素。这样就不必创建完整的list,从而节省大量的空间。在Python中,这种一边循环一边计算的机制,称为生成器:generator。
#将列表生成式的[]改为()得到generator,通过for循环得到generator的下一个返回值
g=(x*x for x in range (10))
for n in g:
print(n)
#用函数表示斐波那契数列的前n个数
def fib(n):
m,a,b=0,0,1
while m<n:
print(b)
a,b=b,a+b
m=m+1
return 'done'
print(fib(6))
可以直接作用于for
循环的对象统称为可迭代对象:Iterable
。
#使用isinstance()判断一个对象是否是Iterable对象
from collections import Iterable
print(isinstance([],Iterable))
print(isinstance({},Iterable))
print(isinstance('abc',Iterable))
print(isinstance('',Iterable))
print(isinstance((x for x in range(10)), Iterable))
可以被next()
函数调用并不断返回下一个值的对象称为迭代器:Iterator
。
#使用isinstance()判断一个对象是否是Iteratro对象
from collections import Iterator
print(isinstance((x for x in range(10)),Iterator))
print(isinstance([], Iterator))
print(isinstance({},Iterator))
print(isinstance('abc',Iterator))
生成器都是Iterator
对象,但list
、dict
、str
虽然是Iterable
,却不是Iterator
。
把list
、dict
、str
等Iterable
变成Iterator
可以使用iter()
函数:
#使用iter()函数把list、dict、str等Iterable变成Iterator
from collections import Iterator
print(isinstance(iter([]),Iterator))
print(isinstance(iter({}),Iterator))
print(isinstance(iter('abc'),Iterator))
Python的Iterator
对象表示的是一个数据流,Iterator对象可以被next()
函数调用并不断返回下一个数据,直到没有数据时抛出StopIteration
错误。可以把这个数据流看做是一个有序序列,但我们却不能提前知道序列的长度,只能不断通过next()
函数实现按需计算下一个数据,所以Iterator
的计算是惰性的,只有在需要返回下一个数据时它才会计算。
Iterator
甚至可以表示一个无限大的数据流,例如全体自然数。而使用list是永远不可能存储全体自然数的。
Python的for
循环本质上就是通过不断调用next()
函数实现的
最新文章
- nuget的搭建及多源冲突
- PHP基础之 错误处理 及 异常处理
- 瀑布流js排列
- spring boot实战(第十三篇)自动配置原理分析
- Dictionary中的结构体转出来
- badboy 之 查看回放结果
- android实现json数据的解析和把数据转换成json格式的字符串
- django + nginx + raspberypi + pidaro
- [转]100个经典C语言程序(益智类问题)
- (转)Jquery弹窗插件Lhgdialog的用法
- input file图片上传预览效果
- 关于破解Quartus
- Android开发 ---基本UI组件6 :只定义一个listView组件,然后通过BaseAdapter适配器根据数据的多少自行添加多个ListView显示数据
- Windows server 2012 R2 解决“无法完成域加入,原因是试图加入的域的SID与本计算机的SID相同
- Windows编程的本质
- MMON进程手工启动
- .NET Core 2.0 Cookie中间件 权限验证
- Ruby gem: Mac 系统下的安装与更新
- 群晖Nas中搭建Intellij Idea的LicenseServer服务
- 把Excel导入SQL server时出现错误