python的迭代器

1.迭代:遍历集合元素的一种方式
2.可迭代对象(Iterable):可以用for…in…循环遍历的对象,可以逐个拿出
2.1 常见的可迭代对象:列表、元组、字典、集合
2.2 判断一个对象是可迭代对象:导入模块:from _collections_abc import Iterable
isinstance(对象, Iterable)
2.3 可迭代对象的工作原理
需要有一个记录,遍历位置的装置,称为迭代器
在类的定义中,魔法方法__iter()__返回(获取)一个迭代器,
因此,在我们自己定义的类中,重写__iter()__方法
我们的类对象就成为可迭代对象
2.4 iter()函数和next()函数
iter()函数:获取一个可迭代对象的迭代器。就是调用了对象的__iter()__方法
next()函数:返回迭代器的下一个遍历的元素,只有迭代器可以使用next()函数,
就是调用了对象的__next()__方法
3.迭代器(Iterator)
3.1 判断对象是否为迭代器。导入模块:from _collections_abc import Iterator
isinstance(对象, Iterator)
注意:迭代器是可迭代对象。可迭代对象不一定是迭代器
3.2 迭代器的原理
首先是可迭代对象也就是重写了__iter()__方法,其次,重写__next()__方法

from _collections_abc import Iterable  # 可迭代对象
from _collections_abc import Iterator  # 迭代器


class Test(object):
    def __init__(self):
        self.lst = []
        self.current = 0  # 迭代的位置

    def add(self, n):
        self.lst.append(n)

    def __iter__(self):
        return self

    def __next__(self):
        if self.current < len(self.lst):
            item = self.lst[self.current]  # 取出当前元素
            self.current += 1  # 迭代位置增加1
            return item
        else:
            raise StopIteration


if __name__ == '__main__':
    t = Test()
    t.add(10)
    t.add(20)
    t.add(30)
    print(isinstance(t, Iterable))
    print(isinstance(t, Iterator))
    for i in t:
        print(i, end=' ')

迭代器实现斐波那契数列

class FibIterator(object):
    def __init__(self, n):
        self.n = n  # 总共几项
        self.num1 = 0
        self.num2 = 1
        self.current = 0    # 记录访问到第某项
    def __iter__(self):
        return self

    def __next__(self):
        if self.current < self.n:
            self.num1, self.num2 = self.num2, self.num1 + self.num2
            self.current += 1   # 计数增1
            return self.num1
        else:
            raise StopIteration

if __name__ == '__main__':
    n = int(input('请输入斐波那契数列项数:'))
    fib = FibIterator(n)
    # 迭代器遍历斐波那契
    # for item in fib:
    #     print(item, end=' ')
    while True:
        try:
            t = next(fib)
        except StopIteration:
            break
        else:
            print(t*10)
def fib(max):
    n, num1, num2 = 0, 0, 1
    while n < max:
        num1, num2 = num2, num1 + num2
        n += 1
    print(num1, end=' ')
if __name__ == "__main__":
    max = int(input('请输入斐波那契数列项数:'))
    fib(max)

def fib(n):     # 斐波那契数列第n项
    if n == 1 or n == 2:
        return 1
    return fib(n-1) + fib(n-2)

你可能感兴趣的:(python,python,开发语言)