前端开发入门到精通的在线学习网站

网站首页 > 资源文章 正文

「成都校区」+ python迭代器和生成器

qiguaw 2024-10-17 12:28:55 资源文章 36 ℃ 0 评论

黑马程序员成都java基础班 28期 2019.6.24开班

黑马程序员成都java基础班 29期 2019.7.10开班

黑马程序员成都java基础班 30期 2019.7.28开班

黑马程序员成都前端基础班 3期 2019.7.10开班

黑马程序员成都UI/UE基础班 首期 2019.7.5开班 首期学费优惠

黑马程序员成都python基础班 2期 2019.7.20开班

迭代器是一个实现了迭代器协议的对象,Python中的迭代器协议就是有next方法的对象会前进到下一结果,而在一系列结果的末尾是,则会引发StopIteration。

在for循环中,Python将自动调用工厂函数iter()获得迭代器,自动调用next()获取元素,还完成了检查StopIteration异常的工作。常用的几个内建数据结构tuple、list、set、dict都支持迭代器,字符串也可以使用迭代操作。你也可以自己实现一个迭代器,如上所述,只需要在类的__iter__方法中返回一个对象,这个对象拥有一个next()方法,这个方法能在恰当的时候抛出StopIteration异常即可。但是需要自己实现迭代器的时候不多,即使需要,使用生成器会更轻松.使用迭代器一个显而易见的好处就是:每次只从对象中读取一条数据,不会造成内存的过大开销.

生成器

生成器的编写方法和函数定义类似,只是在return的地方改为yield。

生成器中可以有多个yield。当生成器遇到一个yield时,会暂停运行生成器,返回yield后面的值。当再次调用生成器的时候,会从刚才暂停的地方继续运行,直到下一个yield。

生成器自身又构成一个迭代器,每次迭代时使用一个yield返回的值。

需要注意的是,生成器中不需要return语句,不需要指定返回值,在生成器中已经存在默认的返回语句

生成器表达式

(i for i in range(5))// 返回迭代器<generator object <genexpr> at 0x7ff3e8f0d960>

列表解析,返回list

[i for i in// 返回list[0, 1, 2, 3, 4]

在这里存在一个问题,那就是range(5)会返回一个长度为5的数据,如果是range(1000)那么就会占用一个1000大小的数组空间;如果我们采用`生成器`,在需要的时候产生一个数字,那么空间的占用情况就会降低,这里我们可以使用xrange()函数来实现。

所以xrange做循环的性能比range好,尤其是返回很大的时候,尽量用xrange吧,除非你是要返回一个列表。

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表