前面
迭代器
那一章我们讲解了可迭代对象和迭代器对象的特点以及
For
循环的原理 :
-
可迭代对象 (iterable) : 在python中,但凡内置有
__iter__
方法的对象,都是可迭代的对象
-
迭代器对象 (iterator) : 内置有
__next__
和
__iter__
方法的对象, 就是迭代器对象, 可迭代对象执行
__iter__
得到的返回值就是迭代器对象
-
For
循环原理请到上面链接查看 (重点)
接下来我们来给一个类重写
__iter__
以及
__next__
方法, 让其可以迭代, 也可以被
for
循环
class
Foo
:
def
__init__
(
self
,
start
,
end
):
self
.
__start
=
start
-
1
self
.
__end
=
end
def
__iter__
(
self
):
return
self
def
__next__
(
self
):
self
.
__start
+=
1
if
self
.
__start
>
=
self
.
__end
:
raise
StopIteration
(
"超出值"
)
return
self
.
__start
for
i
in
Foo
(
1
,
6
):
print
(
i
)
'''输出内容
在函数学习的那一章节, 我们通过函数实现了
MyRange
, 现在我们试试使用类来实现
class MyRange:
def __init__(self,start,stop,step=1):
self.__start = start-1
self.__stop = stop
self.__step = step
def __iter__(self):
return self
def __next__(self):
self.__start += self.__step
if self.__start >= self.__stop:
raise StopIteration("超出值")
return self.__start
for i in MyRange(0,10,2):
print(i)
应用示例 : 产生一个小于某值的斐波那契数列
class Fib:
def __init__(self,count):
self.__start = 0
self.__stop = 1
self.__count = count
def __iter__(self):
return self
def __next__(self):
self.__start,self.__stop = self.__stop,self.__start+self.__stop
if self.__start >= self.__count:
raise StopIteration("超出")
return self.__start
for i in Fib(50):
print(i)