python迭代器原理_迭代器原理-坚持到所有人都放弃!!!-51CTO博客

python中的迭代器是由iter和next组成的,

知道了原理我们也可以自己来写个迭代器

我们可以用next()或是用循环去对一个可迭代对象做处理

class Foo:

pass

f1= Foo()

for i in f1:

print(i)

由这个报错我们可以看出,Foo这个对象不是可迭代的,要变成可迭代的,iter必须要返回一个可迭代的形式

我们把它变成可迭代器:

class Foo:

def __iter__(self):

return 1

f1= Foo()

for i in f1:

print(i)

我们加上了iter就把一个类变成了一个可迭代形式了.

但是报错说我们返回的不是一个迭代器

我们手动写一个迭代器,然后让iter迭代

lt=iter([1,2,3,4])

class Foo:

def __iter__(self):

return lt

print(type(lt))

f1= Foo()

for i in f1:

print(i)

诶,这就是一个迭代器了,但是我们需要的是一个迭代对象,而不是多此一举的一个迭代器传值给另一个迭代器

这个是一个迭代器,但是不是一个可迭代对象,原因是缺少了next

我们加上next把它变成一个可迭代对象

class Foo:

def __iter__(self):

return self

def __next__(self):

return 1

f1= Foo()

for i in f1:

print(i)

这样我们就可以把Foo这个类变成了一个可迭代的对象了

我们不用for循环同样可以

对代码优化一下:

class Foo:

def __init__(self,n):

self.n=n

def __iter__(self):

# print('111',self.n)

return self

def __next__(self):

if self.n >9:

exit()

self.n+=1

return self.n

f1= Foo(5)

print(next(f1))

for i in f1:

print(i)

输出结果为:

总结:

1.迭代器一定是迭代对象,迭代对象不一定是迭代器

2.生成器一定是迭代器,迭代器不一定是生成器

3.使用for...in...来遍历迭代对象是最常用的方式

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值