• 技术文章 >Python技术 >Python基础教程

    如何理解python中的迭代

    爱喝马黛茶的安东尼爱喝马黛茶的安东尼2019-12-23 13:18:36原创2448

    迭代:是通过重复执行的代码处理相似的数据集的过程,并且本次迭代的处理数据要依赖上一次的结果继续往下做,上一次产生的结果为下一次产生结果的初始状态,如果中途有任何停顿,都不能算是迭代。例如:

    (1)非迭代例子

    1

    2

    3

    4

    loop = 0

    while loop < 3:

        print("Hello world!")

        loop += 1

    (2)迭代例子

    1

    2

    3

    4

    loop = 0

    while loop < 3:

        print(loop)

    loop += 1

    例1仅是循环3次输出" Hello world!",输出的数据不依赖上一次的数据,因此不是跌代。

    在python中通常用for …in遍历元组、列表、字典。而for … in后面需要那个可迭代对象。那么在python中什么是可迭代对象呢?

    在python中

    (1)可迭代对象(iterable),是指拥有了__iter__的内置方法的对象。

    (2)迭代器(iterator) ,是指拥__iter__与__next__方法的对象。

    在这里__iner__需要返回一个迭代器对象,__next__方法可以取出值,并停留到取值的位置,以便可取出下一个值。

    在这里可以看出一个迭代器一定是一个可迭代对象,而一个可迭代对象不一定是迭代器。

    在python中可以用isinstance(object,Iterable)判断对象是否为可迭代对象。用isinstance(object,Iterator)判断对象是否为迭代器。

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    In [1]: from collections import Iterable

    In [2]: from collections import Iterator

    In [3]: isinstance(1,Iterable)

    Out[3]: False

    In [4]: isinstance(1,Iterator)

    Out[4]: False

    In [5]: isinstance((1,2),Iterable)

    Out[5]: True

    In [6]: isinstance((1,2),Iterator)

    Out[6]: False

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    In [7]: class D():

       ...:     def __iter__(self):

       ...:         pass

       ...:     def __next__(self):

       ...:         pass

       ...:    

    In [8]: d = D()

    In [9]: isinstance(d,Iterator)

    Out[9]: True

    In [10]:

    python实现迭代:列如,用迭代实现斐波那契数列:

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    28

    29

    30

    31

    32

    33

    34

    35

    36

    37

    38

    class Fibonacci(object):

        def __init__(self,all_num):

            """初始化类属性"""

            #定义一个实例属性,存放要实现斐波那契数列的个数

            self.all_num = all_num

             

            #定义count实例属性,作为迭代的退出条件判断

            self.count = 0

             

            #实现斐波那契数列定义a=0,b=1

            self.a = 0

            self.b = 1

        def __iter__(self):

            """在这里self所指3对象本身是一个

            迭代器,所以可以返回自身

            """

            return self

        def __next__(self):

            """

            next,实现迭代返回结果

              

            """

            #判断输出的数列个数,是否小于需要的数列个数

            if self.count < self.all_num:

                 

                #rect最终要输出的斐波那契数列

                rect = self.a

                 

                #在这里重复让a=b,b=a+b,来实现斐波那契数列

                self.a, self.b = self.b, self.a + self.b

                self.count += 1

                return rect

            else:

                #当迭代遇到StopIteration异常时便会停止迭代

                raise StopIteration

    fibonacci = Fibonacci(10)

    for fibo_num in fibonacci:

        print(fibo_num)

    迭代:通过存储一种生成方式,而不是生成结果,来实现数据存储。从而极大的节约了存储空间。

    注意:

    在python2.x中 range()函数后面存的是一个列表,xrange()存的是一个可迭代对象。而在python3.x中range()存的是一个迭代对象,相当于python2.x中的xrange()。

    众多python培训视频,尽在python学习网,欢迎在线学习!

    专题推荐:python 迭代
    上一篇:python冒号是什么意思 下一篇:bash和python的区别有哪些

    相关文章推荐

    • 详解python中的迭代• python中迭代什么意思• python迭代器是什么意思

    全部评论我要评论

    © 2021 Python学习网 苏ICP备2021003149号-1

  • 取消发布评论
  • 

    Python学习网