python迭代器

Posted maxiaohei

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python迭代器相关的知识,希望对你有一定的参考价值。

迭代器的概念:

迭代是访问元素的一种方式。迭代器是一个可以集中遍历位置的对象。迭代器对象从集合的第一个元素开始访问,直到所有元素被访问结束。迭代器只能往前不能往后

可迭代对象:

可以通过for ...in .... 这类语句迭代读取一条数据供我们使用的对象称之为可迭代对象(itrable)

判断方法:

from collections import Iterable

isinstance([],iterable)    #  True

可迭代对象的本质:

向使用者提供了一个记录访问数据,返回下一条数据的迭代器。(具备__iter__方法的对象就是一个可迭代对象)

判断对象是否是迭代器:

from collections import Iterator

isinstance([],Iterator)  #  False

isinstance(iter([]),Iterator)  #  True

迭代器对象Iterator

一个实现了 __iter__方法和 __next__ 方法的对象是迭代器

for... in ... 循环的本质

for item in Iterable 循环的本质就是先通过iter()函数获取可迭代对象Iterable的迭代器,然后对获取到的迭代器不断调用next()方法来获取下一个值并将其赋值给item,当遇到StopIteration的异常后循环结束。

迭代器的应用(斐波那契数列)

class FibIterator(object):
    def __init__(self, n):
        # 要求的前n个fiber数列
        self.n = n
        # 初始值
        self.num1 = 0
        self.num2 = 1

        # 记录下一个数字是否到需要结束
        self.current = 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__(self):
        return self

if __name__ == __main__:
    fib = FibIterator(10)
    # print(isinstance(fib, Iterator))
    print(fib)
    for x in fib:
        print(x, end= )

除了for循环能接收可迭代对象,list、tuple等也能接收可迭代对象:

li = list(FibIterator(15))
print(li)
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377]
tp = tuple(FibIterator(6)) print(tp)
(0, 1, 1, 2, 3, 5)




以上是关于python迭代器的主要内容,如果未能解决你的问题,请参考以下文章

为啥我在这个 python 片段中得到 float 是不可迭代的? [复制]

python:可迭代对象,迭代器,生成器函数,生成器的解析举例代码说明

python:可迭代对象,迭代器,生成器函数,生成器的解析举例代码说明

python学习之-迭代器

python中迭代器(转)

Python概念之装饰器迭代器生成器