概念
可迭代对象:在python中,列表,元组,字典,字符串这些可以用for循环遍历的对象称为可迭代对象。
迭代器:我们创建一个容器,该容器中可以生成一些数据,这些数据可以遍历,该容器被我们称为迭代器。
生成器:生成器为迭代器的一种,使用yield返回函数,每次调用yield函数程序都会暂停,使用next()或send()函数恢复程序进行。
为什么要创建迭代器:
通过列表等python一些内置数据函数生成,我们可以直接创建一个可遍历对象,但是,受到内存限制,我们在创建一个很大的数据时,如果要把数据全部创建出来再进行操作,就会占用很大的内存,这样的设计方式是很不友好的,程序的使用性能也会大打折扣,因此,我们需要创建一个迭代器,让我们需要哪个数据就创建哪个数据,不用一下子把数据全部创建出来,从而能节省大量空间。
创建迭代器的三种方式:
1 为容器对象添加__iter__()和__next__()方法,__iter__()返回迭代器对象本身,__next__()返回每次调用next()或迭代时的元素
举例如下:
class Generator():
def __init__(self,start = 0,end = 0):
self.start = start
self.end = end
def __iter__(self):
print("创建一个迭代器")
return self
def __next__(self):
print("调用next方法")
if self.start < self.end:
i = self.start
self.start += 1
return i
else:
raise StopIteration()
ex = Generator(1,10)
for i in ex:
print(i)
运行结果如下:
创建一个迭代器
调用next方法
1
调用next方法
2
调用next方法
3
调用next方法
4
调用next方法
5
调用next方法
6
调用next方法
7
调用next方法
8
调用next方法
9
调用next方法
2 使用内置函数iter()函数将可迭代对象转换为迭代器
举例如下
for i in iter(range(10)):
print(i)
3 生成器,使用yield函数创建一个迭代器,
斐波那契数列
def fib(max):
n,a,b =0,0,1
while n < max:
yield b
a,b =b,a+b
n = n+1
return 'done'
a = fib(10)
print(fib(10))