个人理解的python中生成器与迭代器

概念

可迭代对象:在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))

猜你喜欢

转载自blog.csdn.net/qq_41982304/article/details/81604952
今日推荐