Python碎片日记18——迭代:文件迭代器、其他可迭代对象、手动迭代iter和next

迭代

所有含有_next_方法(迭代协议)的对象都是可迭代的。
可以通过next()来迭代的,叫迭代器。

文件迭代器

文件是可迭代的,并且本身就是迭代器
例如readline():

f = open('a.txt')
line0 = f.readline() #读第一行
line1 = f.readline() #读第二行
...
# 当最后一行时,返回空字符

# 类似的_next_()也能实现上述效果
line0 = f._next_()
...
# 区别在于,当最后一行时,会引发StopIteration异常。

# 类似的,内置函数next()也可以,和_next_()效果一样
line0 = next(f)
...

其他可迭代对象及工具

许多collection对象都可以迭代,但和文件不同,它们本身不是迭代器。对于字典,除了自身可迭代(相当于keys迭代),此外还有D.keys()和D.values()和D.items()三种可迭代方法。
内置函数range()、zip()、map()、filter()都可以产生可迭代对象,其中,range()产生的迭代对象可以产生多个迭代器,而其他的只能产生一个。enumerate()产生的对象不仅可迭代,而且也可以作为迭代器。sorted()返回列表,也是可迭代的。reduce()、sum()、any()、all()、max()、min()等内置函数可以扫描可迭代对象。
(这些方法又称迭代工具、迭代环境)

手动迭代iter和next

next()是一个内置函数,相当于自动调用上个迭代器的_next_方法。文件本身就是迭代器,因此不需要转换即可使用next()。而其他可迭代对象,需要通过iter()手动将其转化为迭代器:

L =[1,2,3]
I = iter(L)
a = I.next()
...

在一些需要迭代器的表达式中,如for循环等,可迭代对象会自动传递生产迭代器并且避免异常,不需要手动iter().

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值