迭代是访问集合元素的一种方式,迭代器是一个可以记住遍历位置的对象,从第一个元素迭代到最后一个元素,迭代器只能往前,不能后退。
可迭代对象: list、dict、tuple、str
不能迭代: int类型
把可以通过for...in...
这类语句迭代读取一条数据供我们使用的对象称之为可迭代对象
可以使用isinstance()来判断一个对象是否是可迭代对象( Iterable )
In [50]: from collections import Iterable
In [51]: isinstance([], Iterable)
Out[51]: True
In [52]: isinstance({}, Iterable)
Out[52]: True
In [53]: isinstance('abc', Iterable)
Out[53]: True
In [54]: isinstance(mylist, Iterable)
Out[54]: False
In [55]: isinstance(100, Iterable)
Out[55]: False
迭代器每迭代一次都会返回一条数据,所以就需要有一个东西记住当前返回的是哪一个数据,这个起记录作用的就是迭代器
可迭代对象通过__iter__方法返会一个迭代器。
如果一个对象里面拥有__iter__方法的话,他就是一个可迭代对象
用迭代器完成斐波拉切数列
class FibInterator(object):
def __init__(self,n)
# 指明生成数列的前n个数
self.n = n
# 用来记录当前迭代到那个数了
self.current = 0
# 初始有两个数
self.num1 = 0
self.num2 = 0
def __next__(self):
if self.current < self.n:
num = self.num1
self.num1,self.num2 = self.num2,self.num1+self.num2
self.current += 1
return num
else:
raise StopIteration
def __iter__():
return self
if __name__ == '__main__':
fib = FibIterator(10)
for num in fib:
print(num, end=" ")
除了for循环能接受可迭代对象之外,list、tuple也可以接受
“`
li = list(FibIterator(15))
print(li)
tp = tuple(FibIterator(6))
print(tp)