python3 迭代器和生成器

    技术2022-07-10  152

    python3 迭代器和生成器

    迭代器

    迭代是访问集合元素的一种方式迭代器是一个可以记住遍历位置的对象迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能前进不能后退迭代器由两个基本的方法:iter()和next()

    字符串,列表或元组对象都可用于创建迭代器:

    list = [1,2,3,4,5,6,7,8,9] it = iter(list) # 创建迭代器对象 print(next(it)) """1"""

    迭代器对象可以使用常规的for语句进行遍历:

    list = [1,2,3,4] it = iter(list) for x in it: print(x, end = " ") """1 2 3 4"""

    也可以使用next()函数

    import sys list = [1,2,3,4] it = iter(list) while True: try: print(next(it)) except StopIteration: sys.exit() """ 执行结果 1 2 3 4 """

    实例:求一个数的因子


    创建一个迭代器
    把一个类作为一个迭代器使用需要在类中实现两个方法__iter__()和__next__()iter()方法返回一个特殊的迭代器对象,这个迭代器对象实现了__next__()方法并通过StopIteration异常标识迭代的完成next()方法会返回下一个迭代器对象

    创建一个返回数字的迭代器,初始值为1,逐步递增1:

    class ReturnNumber: def __iter__(self): self.a = 1 return self def __next__(self): x = self.a self.a += 1 return x returnnumber = ReturnNumber() Iter = iter(returnnumber) print(next(Iter)) print(next(Iter)) print(next(Iter)) print(next(Iter)) print(next(Iter)) """执行结果 1 2 3 4 5 """

    StopIteration StopIteration异常用于标识迭代的完成,防止出现无限循环的情况,在__next__()方法中我们可以设置在完成指定循环次数后出发StopIteration异常来结束迭代

    在20次迭代后停止执行:

    class ReturnNumber: def __iter__(self): self.a = 1 return self def __next__(self): if self.a <= 20: x = self.a self.a += 1 return x else: raise StopIteration returnnumber = ReturnNumber() Iter = iter(returnnumber) for x in Iter: print(x) """执行结果 1 2 · · · 19 20 """

    生成器

    使用了yield的函数被称为生成器(generator)跟普通函数不用的是,生成器是一个返回迭代器的函数,只能用于迭代操作在调用生成器运行的过程中,每次遇到yield时函数会暂停并保存当前所有的运行信息,并返回yield的值,并在下一次执行next()方法时从当前位置继续运行

    使用yield实现斐波那契数列:

    import sys def fibonacci(n): #生成器函数---斐波那契 a, b, counter = 0, 1, 0 while True: if (counter > n): return yield a a, b = b, a+b counter += 1 f = fibonacci(10) # f是一个迭代器,由生成器返回生成 while True: try: print(next(f), end = " ") except StopIteration: sys.exit() """执行结果 0 1 1 2 3 5 8 13 21 34 55 """
    Processed: 0.015, SQL: 9