首页
Web开发
Windows程序
编程语言
数据库
移动开发
系统相关
微信
其他好文
会员
首页
>
其他好文
> 详细
迭代器
时间:
2017-08-05 19:43:06
阅读:
119
评论:
0
收藏:
0
[点我收藏+]
标签:
而且
取值
1.0
break
用途
false
image
一个
捕捉异常
迭代器
可迭代对象(iterable)
概念
实现了迭代器协议的对象(只要对象本身有__iter__方法,那它就是可迭代的)
可以直接作用于
for循环的对象统称为可迭代对象
判断一个对象是否可迭代对象
1. isinstance()
使用
isinstance()判断一个对象是否是
Iterable对象(再用这个方法的时候一定记得调用模块)
from
collections
import
Iterable
print(
isinstance([],Iterable))
# True
列表是可迭代对象
print(
isinstance({},Iterable))
# True
字典是可迭代对象
print
(isinstance
(
‘abc‘
,Iterable))
# True
字符串是可迭代对象
print(
isinstance((x
for
x
in
range(
10)),Iterable))
# True
生成器是可迭代对象
print
(isinstance
(
100
,Iterable))
# False
数字不是可迭代对象<br><br>
2. 可以引用 .__iter__
另一种是
Python内置方法中有
.__iter__ 方法,如果能引用该方法的对象都是可迭代对象(
.__iter__方法调用后的执行结果就是迭代器
对象
字符串
列表
元组
字典
集合 文件句柄
迭代器 (Iterator)
概念
对象必须提供一个next方法,执行该方法要么返回迭代中的下一项,要么就引起一个StopIteration异常,以终止迭代 (只能往后走不能往前退)
判断
from
collections
import
Iterator
print(
isinstance((x
for
x
in
range(
10)), Iterator))
# True
生成器是迭代器
print(
isinstance([], Iterator))
# False
列表不是迭代器
print(
isinstance({}, Iterator))
# False
字典不是迭代器
print
(isinstance
(
‘abc‘
, Iterator))
# False
字符串不是迭代器<br><br>
对象
文件句柄
文件句柄既能被
next()函数调用又能被
iter()函数调用,所以文件既是迭代器,又是可迭代对象
事例
while
d=
{‘a‘
:
1
,‘b‘
:
2
,‘c‘
:
3
}
i
=d.__iter__()
#i=iter(d)#和上面的等式一模一样
i就是迭代器
print(i.__next__())
#
等同于下面
print
(next
(i))
#
等同于上面
print(i.__next__())
print
(i.__next__())
#因为字典中的
key只有
3个,所以在这里会报错,因为超出了范围
---------------------------------------------------
#报错内容是
StopIteration,下面就一起消除这个报错吧
d=
{‘a‘
:
1
,‘b‘
:
2
,‘c‘
:
3
}
i
=
d.__iter__()#
这是一个iter
函数,等同于iter(d) i
就是迭代器
#i=iter(d)#和上面的等式一模一样
i就是迭代器
while
True:
try
: #try...except
捕捉异常,看是否出现StopIteration
这个异常,如果出现执行break
,相当于一个if
判断
print
(next
(i))
except
StopIteration:
break
列表的例子:
l=
[‘a‘
,‘b‘
,‘c‘
,‘d‘
,‘e‘
]
i
=l.__iter__()
# i=iter(i)
while
True
:
try:
#try...except
捕捉异常
print
(next
(i))
except
StopIteration:
break
文件
f=open("a.txt","r")
i=f.__iter__()
while True:
try:
print(next(i),end="")
except StopIteration:
break
for
d=
{‘a‘
:
1
,‘b‘
:
2
,‘c‘
:
3
}
for
k
in
d:#for
循环在这里做的事可以理解为 d=d.__iter__()
,牛逼!
print
(k)
#而且
for循环自动加了
next()函数,自动
next下一个,牛逼!
#而且
for循环把
while循环当中的
try...except所做的是给做了,牛逼!
s
=
{
1
,
2
,
3
,
4
}#for
循环列表
for
i in
s:
print
(i)
with
open(
"a.txt",
"r") as f:
for
line
in
f:
两者区别
文件句柄既能被
next()函数调用又能被
iter()函数调用,所以文件既是迭代器,又是可迭代对象
字符串,列表,元组,字典,集合都不是迭代器,是可迭代对象
整形不是可迭代对象,所以更不可能是迭代器
迭代器
1.独有.__next__方法
2.也有.__iter__方法
3.迭代器.__iter__()后还是迭代器
可迭代对象
1.有.__iter__方法
优缺点
优点
#优点
# 1:迭代器提供了一种不依赖于索引的取值方式,这样就可以遍历那些没有索引的可迭代对象了(字典,集合,文件)
# 2:迭代器与列表比较,迭代器是惰性计算的,更节省内存
缺点
#缺点:
# 1:无法获取迭代器的长度,使用不如列表索引取值灵活
# 2:一次性的,只能往后取值,不能倒着取值
用途
for循环
迭代器
标签:
而且
取值
1.0
break
用途
false
image
一个
捕捉异常
原文地址:http://www.cnblogs.com/oyoui/p/7291110.html
踩
(
0
)
赞
(
0
)
举报
评论
一句话评论(
0
)
登录后才能评论!
分享档案
更多>
2021年07月29日 (22)
2021年07月28日 (40)
2021年07月27日 (32)
2021年07月26日 (79)
2021年07月23日 (29)
2021年07月22日 (30)
2021年07月21日 (42)
2021年07月20日 (16)
2021年07月19日 (90)
2021年07月16日 (35)
周排行
更多
分布式事务
2021-07-29
OpenStack云平台命令行登录账户
2021-07-29
getLastRowNum()与getLastCellNum()/getPhysicalNumberOfRows()与getPhysicalNumberOfCells()
2021-07-29
【K8s概念】CSI 卷克隆
2021-07-29
vue3.0使用ant-design-vue进行按需加载原来这么简单
2021-07-29
stack栈
2021-07-29
抽奖动画 - 大转盘抽奖
2021-07-29
PPT写作技巧
2021-07-29
003-核心技术-IO模型-NIO-基于NIO群聊示例
2021-07-29
Bootstrap组件2
2021-07-29
友情链接
兰亭集智
国之画
百度统计
站长统计
阿里云
chrome插件
新版天听网
关于我们
-
联系我们
-
留言反馈
© 2014
mamicode.com
版权所有 联系我们:gaon5@hotmail.com
迷上了代码!