zoukankan      html  css  js  c++  java
  • 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)
    LESS IS MORE !
  • 相关阅读:
    使用bash编写Linux shell脚本参数和子壳
    开发项目的简单流程(需求、数据库、编码)
    hadoop和Hive的数据处理流程
    数据分析
    模糊聚类分析的实现
    贝叶斯1
    代理猎手
    贝叶斯2
    模糊聚类算法(FCM)和硬聚类算法(HCM)的VB6.0实现及
    C++模板
  • 原文地址:https://www.cnblogs.com/maxiaohei/p/7794508.html
Copyright © 2011-2022 走看看