标签:class pre foo ini 自己 log text 技术 blog
python中的迭代器是由iter和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...来遍历迭代对象是最常用的方式
标签:class pre foo ini 自己 log text 技术 blog
原文地址:http://blog.51cto.com/853056088/2139409