美文网首页python
生成器,迭代器理解

生成器,迭代器理解

作者: 一曲广陵散 | 来源:发表于2017-03-11 16:45 被阅读16次

引用
看完这篇,你就明白生成器是什么

一,概述

生成器是Python编程中的高级技能,但是各种项目中可以随处见到生成器的身影,所以不得不去理解,使用它
提到生成器,总不可避免的把迭代器拉出来对比,生成器是一个在行为上和迭代器非常类似的对象
如果将迭代器比成Android,生成器是IOS,两者功能是差不多,但是生成器更加优雅

二,迭代器

迭代器用于迭代操作(for循环)的对象,像列表一样可以获取其中的每一个元素
任何实现了__next__方法(python2中是next)的对象都可以称其为迭代器

它和列表的区别在于,构建迭代器的时候,不像列表将所有的元素一次性加载到内存中,而是以一种
延迟计算(lazy evaluation)的方式返回元素
这正是它的优点,比如列表中含有一千万个整数,需要占超过400M的内存,而使用迭代器只需要使用几十字节的空间,因为它并没有将所有的元素装载到内存中,而是等到调用next方法的时候,才返回该元素(call by need),本质上for 循环就是不断的调用迭代器的next方法

三,生成器

知道迭代器之后,可以正式进入生成器的话题了,普通函数用return返回一个值,和
Java等其他语言一样,然而在Python中还有一种函数,用关键字yield来返回值
这种函数叫生成器函数,函数被调用时候会返回一个生成器对象,
生成器本质上还是一个迭代器,也是用在迭代操作中,因此它和迭代器一样的特性
唯一的区别是实现方式上不一样,后者更加简洁

fun就是一个生成器函数,调用该函数时候返回对象就是生成器g,
这个生成器对象的行为和迭代器是非常相似的,可以用在for 循环等场景中
yield对应的值在函数被调用的时候不会立刻返回,而是调用next方法的时候才返回
(本质上for 循环也是调用next方法)

为什么要使用生成器呢?显然,用生成器没有那么多冗余的代码,而且性能上一样的高效,为什么不用呢?

四,生成器表达式

生成器表达式和列表推导式很像,但是它们返回的对象不一样,
生成器返回生成器对象,列表推导式返回列表对象

相关文章

  • Generator(一)

    要理解生成器,先理解迭代器。因为生成器就是返回一个迭代器的函数。 ES5实现的迭代器 ES6中的生成器用法: 生成...

  • 理解迭代器/生成器

    完全理解Python 迭代对象、迭代器、生成器 迭代和生成操作总结 Python迭代器 http://www.ji...

  • pythoncookbook 第4章 生成器与迭代器

    [toc] 4 迭代器与生成器 for xxx in xxx理解 for xxx in xxx在迭代器中应用 调用...

  • 2019-03-20

    1 迭代器和生成器 迭代器 获取数据:next (迭代器)、for 循环遍历 ,数据来源:转换、生成器 生成器:...

  • yield and Iterator

    Generator(生成器) 生成器是特殊的迭代器,迭代器不一定是生成器。 生成器与迭代器均是可迭代对象。 目前学...

  • 生成器(Generators)

    生成器(Generators) 首先要理解迭代器(iterators) 可迭代对象(Iterable):Pytho...

  • [开篇五:Python零散知识拾荒之生成器]2019-02-15

    生成器理解   生成器算得上是Python语言中最吸引人的特性之一,生成器其实是一种特殊的迭代器,不过这种迭代器更...

  • 14. Python之迭代器(iterator)和生成器(gen

    1 什么是迭代器 2 为何要有迭代器 3 如何用迭代器 4 生成器 生成器应用案例

  • 第014篇:三大神器之生成器

    Python的三大神器:装饰器、迭代器、生成器 1、生成器 1.1、什么是生成器 生成器就是迭代器的一种;生成器作...

  • ES6 ES7 语法特性与规范

    生成器函数 说生成器之前先讲迭代器,下面就是迭代器的简单范例,迭代器代表一个流程,迭代器的每次next()调用,会...

网友评论

    本文标题:生成器,迭代器理解

    本文链接:https://www.haomeiwen.com/subject/mszagttx.html