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 !
  • 相关阅读:
    将C#文档注释生成.chm帮助文档
    Html5shiv
    C#创建COM组件
    WebBrowser控件使用详解
    iframe跨域
    VMware Workstation 虚拟机暂停后无法启动 出现Exception 0xc0000006 (disk error while paging) has occurred.错误
    Java Timer 定时器的使用
    adf笔记
    JS编码解码
    【Python】Django CSRF问题
  • 原文地址:https://www.cnblogs.com/maxiaohei/p/7794508.html
Copyright © 2011-2022 走看看