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 !
  • 相关阅读:
    SQL盲注工具BBQSQL
    嗅探X-Windows服务按键工具xspy
    多协议底层攻击工具Yesinia
    LLMNR欺骗工具Responder
    Arduino可穿戴教程保存源文件与打开已经存在的源文件
    GRDB使用SQLite的WAL模式
    CString之GetBuffer与ReleaseBuffer
    VC++ 模块与资源分离
    KV6.60 SP1
    Html之head部分详解
  • 原文地址:https://www.cnblogs.com/maxiaohei/p/7794508.html
Copyright © 2011-2022 走看看