zoukankan      html  css  js  c++  java
  • Python:迭代器的简单理解

    一、什么是迭代器

    迭代,顾名思义就是重复做一些事很多次(就现在循环中做的那样)。迭代器是实现了__next__()方法的对象(这个方法在调用时不需要任何参数),它是访问可迭代序列的一种方式,通常其从序列的第一个元素开始访问,直到所有的元素都被访问才结束。 [注意]:迭代器只能前进不能后退

    [迭代器的优点]:

    使用迭代器不要求事先准备好整个迭代过程中的所有元素。迭代器仅仅在迭代到某个元素时才计算该元素,而在这之前或之后元素可以不存在或者被销毁。因此迭代器适合遍历一些数量巨大甚至无限的序列。

     二、创建迭代器

    A、使用内建的工厂函数iter(iterable)可以将可迭代序列转换为迭代器

    1 a=[1,2,3,4]
    2 b=(1,2,3)
    3 str='Tomwenxing'
    4 print(iter(a))
    5 print(iter(b))
    6 print(iter(str))

    B、自定义迭代器

    •Python中迭代器的本质上每次调用__next__()方法都返回下一个元素或抛出StopIteration的容器对象

    •由于Python中没有“迭代器”这个类,因此具有以下两个特性的类都可以称为“迭代器”类:

      1、有__next__()方法,返回容器的下一个元素或抛出StopIteration异常

      2、有__iter__()方法,返回迭代器本身

     1 #斐波那契数列
     2 class Fabs():
     3     def __init__(self,max):
     4         self.max=max
     5         self.n,self.a,self.b=0,0,1
     6 
     7     def __iter__(self):#定义__iter__方法
     8         return self
     9 
    10     def __next__(self):#定义__next__方法
    11         if self.n<self.max:
    12             tmp=self.b
    13             self.a,self.b=self.b,self.a+self.b
    14             #等价于:
    15             #t=(self.a,self.a+self.b)
    16             #self.a=t[0]
    17             #self.b=t[1]
    18             self.n+=1
    19             return tmp
    20         raise StopIteration
    21 
    22 print(Fabs(5))
    23 for item in Fabs(10):
    24     print(item,end=' ')

    三、迭代器的方法

    1.iter.__next__():返回迭代器的下一个元素,但没有下一个元素时抛出StopIteration异常

    1 list=[1,2,3,4]
    2 list=iter(list)
    3 print(list.__next__())
    4 print(list.__next__())
    5 print(list.__next__())
    6 print(list.__next__())
    7 print(list.__next__())

    2.iter.__iter__():返回迭代器对象本身

    1 list=[1,2,3,4]
    2 list=iter(list)
    3 print(list.__iter__())

  • 相关阅读:
    Lightoj 1082【RMQ】
    hrbust1444 逃脱 【BFS】
    萌新学习笔记之哈夫曼树
    lightoj 1085【离散化+树状数组】
    CodeForces 586D【BFS】
    lightoj 1089 【离散化+线段树】
    lightoj 1088【树状数组+离散化】
    《算法导论》笔记 第6章 6.2保持堆的性质
    《算法导论》笔记 第6章 6.1堆
    【python】__all__
  • 原文地址:https://www.cnblogs.com/duwenxing/p/7397759.html
Copyright © 2011-2022 走看看