python迭代对象是什么意思_python的迭代对象

迭代对象这个概念是python里面非常核心的东西,我想跟大家分享一下,什么是可迭代对象。

比如我们有一个list1=[1,2,3],s='abc'

for n in list1:

print n

for c in s:

print c

其实list就是一个迭代对象,一般来说列表,字符串,可以放在for后面使用的,都是可以迭代的对象。那么为啥迭代的对象可以迭代呢。大家有没有想过这个问题,其实python里面一切皆对象。

我们一起看一个例子,比如我们用range(),range主要是处理整数,如果我们想处理float数怎么办,比如我想有一个FloatRange(0.0,1.0,0.2),起始0.0,终点1.0,步长0.2,那么功能函数该如何实现迭代器呢?

class FloatRange:def init(self,start,end,step=0.1):self.start=start self.end=end self.step=stepdef __iter__(self):

t=self.start

while t<=self.end:

yield round(t,2)

t+=self.step

(1)声明一个类FloatRange()

(2)初始化start,end和step

(3)写一个iter函数,for循环的时候就会自动调用,准确说是迭代的时候就会调用

for n in FloatRange(0.0,1.0,0.2):

print n

0.0 0.2 0.4 0.6 0.8 1.0

print list(FloatRange(0.0,1.0,0.2))[0.0,0.2,0.4,0.6,0.8,1.0]

[0.0,0.2,0.4,0.6,0.8,1.0]

那么。我为什么要和大家分享这个概念呢?我觉得弄懂这个概念对大家深入理解python之美很有帮助,此外,当你阅读别人代码时,如果有这个概念,会让你更容易理解。

最后,再介绍一下反向迭代器

l=[1,2,3,4,5] print(l[::-1])

#可以用[::-1] print(reversed(l))

#也可以用reversed关键字,生成一个反向迭代器对象,其实就是调用reversed内置函数

class FloatRange:

def init(self,start,end,step=0.1):

self.start=start

self.end=end

self.step=step

def __iter__(self):

t=self.start

while t<=self.end:

yield round(t,2)

t+=self.step

def __reversed__(self):

t=self.end

while t>=self.start

yield round(t,2)

t-=self.step

正向迭代:for x in FloatRange(1.0,2.0,0.3):print(x)

反向迭代:for x in reversed(FloatRange(1.0,2.0,0.3):print(x)

那么迭代器有什么妙用呢?

如果我们要读入一个几万行的文件,我们假设只需取100到200

方法一:readlines()函数

with open('/var/log/install.log','rb') as rf

lines=rf.readlines()

print lines[100:200]

这种方法比较暴力,而且比较浪费空间,试想一下,如果我们的文件有几个G大,那怎么办呢?

方法二:用迭代器切片。

from itertools import islice

with open('/var/log/install.log','rb') as rf:

for line in islice(rf,100,200):

print line.strip()

用标准库里的itertools.islice()返回一个生成器对象,这样读的时候是一点点读入内存空间,而不是一次性读入所有的。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值