走入计算机的第二十天(迭代器)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了走入计算机的第二十天(迭代器)相关的知识,希望对你有一定的参考价值。

一 迭代器

迭代的意思:类似于循环每一次重复的过程就被称为迭代的过程,提供迭代方法的容器称为迭代器。

1.迭代器协议是指:迭代器是访问集合元素的一种方式。迭代器对象从集合的第一个元素开始访问,知道所有的元素被访问完结束。迭代器只能往前不会后退,不过这也没什么,因为人们很少在迭代途中往后退。

2.可迭代对象:实现了迭代器协议的对象(如何实现:对象内部定义一个__iter__()方法),对象必须提供一个next方法,执行该方法要么返回迭代中的下一项,要么就引起一个StopIteration异常,以终止迭代

3.协议是一种约定,可迭代对象实现了迭代器协议,python的内部工具(如for循环,sum,min,max函数等)使用迭代器协议访问对象。

4python为了提供一种不依赖于索引的迭代方式,为一些对象内置__iter__方法,而能执行obj.__iter__这种方法称为可迭代的对象,以obj.__iter__() 这种方法得到的结果就是迭代器,得到的迭代器:既有__iter__这种方法又有__next__的方法。

技术分享

迭代的概念:重复的过程称为迭代,每次重复即一次迭代,并且每次迭代的结果是下一次迭代的初始值

技术分享

迭代器的优缺点:
优点:
提供统一的且不依赖于索引的迭代方式
惰性计算,节省内存
缺点:
无法获取长度
一次性的,只能往后走,不能往前退
for循环就是触发迭代器的迭代功能,依次循环取出值。
二 生成器

生成器函数:函数体内包含有yield关键字,该函数执行的结果是生成器

技术分享

生成器就是迭代器的一种实现,生成器使得python更为简洁,使python模仿协同程序的概念得以实现。迭代器需要去定义一个类和实现相关的方法。而生成器则只需要在普通函数中加上yield就可以了。

yield的功能:

    1.与return类似,都可以返回值,但不一样的地方在于yield返回多次值,而return只能返回一次值

技术分享  技术分享

    2.为函数封装好了__iter__和__next__方法,把函数的执行结果做成了迭代器

    3.遵循迭代器的取值方式obj.__next__(),触发的函数的执行,函数暂停与再继续的状态都是由yield保存的技术分享

协同程序,就是可以运行的独立函数调用,保留函数的局部变量等数据,让函数可以暂停或者挂起。并且在需要的时候会从上次执行的后面第一个地方继续执行。

    三 。 三元表达式

  三元表达式就是可以将一些简单的if判断求值得方法再一次的简介化。会更好更简单的记住那个方法。

  三元表达式的公式是:

                           为真时的结果 if 判定条件 else 为假时的结果技术分享技术分享结果为错的执行

             技术分享技术分享结果正确的执行

   还可以求出函数的大小值如图

 技术分享技术分享

四  列表解析

   根据已有的条件,将此条件用最简化的格式创建成一个新的你需要的列表形式,就叫做列表解析。

技术分享技术分享

  列表解析是Python迭代机制的一种应用,它常用于实现创建新的列表,因此用在[]中。将成立的结果写在左边,不需要不成立的结果。

 五 生成器表达式

   生成器表达式是在2.4中引入的新内容,它和列表解析的语法很像,但是在大 数据量处理时,生成器表达式的优势就体现出来了,因为它的内存使用方式更好,效率更高,它并不创建一个列表,只是返回一个生成器。

   列表解析和生成器表达式语法虽然很像,但实质上还是有很大不同的。

生成器表达式是将列表的[]换成(),占的内存很小,可以装上无数个值。其实就是一个迭代器,取值方法和迭代器的方法一样。
技术分享技术分享










以上是关于走入计算机的第二十天(迭代器)的主要内容,如果未能解决你的问题,请参考以下文章

走入计算机的第十天(linux基础的结尾)

走入计算机的第四十天(数据库1)

走入计算机的第三十天(继承实现原理和封装)

走入计算机的第二十七天(模块与包的调用)

走入计算机的第二十六天(内置模块4)

走入计算机的第二十九天(继承与派生)