最新公告
  • 欢迎您光临网站无忧模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • 如何理解python中的迭代

    正文概述    2020-01-18   279

    如何理解python中的迭代

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

    (1)非迭代例子

    loop = 0
    while loop < 3:
        print("Hello world!")
        loop += 1

    (2)迭代例子

    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)判断对象是否为迭代器。

    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
    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实现迭代:列如,用迭代实现斐波那契数列:

    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中的迭代

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元