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 !
  • 相关阅读:
    k8S 搭建集群
    K8S搭建
    华为交换机常用命令
    JSP中动态include和静态include的区别
    什么情况下调用doGet()和doPost()
    get和post的区别
    什么是spring框架
    spring的作用
    什么是DI
    依赖注入的三种实现方式
  • 原文地址:https://www.cnblogs.com/maxiaohei/p/7794508.html
Copyright © 2011-2022 走看看