96编辑器旗下产品
找图
终身
ID:0
到期时间:永久
退出登录
您的位置:首页 > 百科管理 > 详情

函数生成器-Python 函数 - 返回生成器

原创:找图网 2023-04-25 10:28:17
  • 生成器推导式、生成器函数

  • 生成器是用来创建数据序列的一种对象

    使用它可以迭代庞大的序列,且不需要在内存中创建和存储整个序列

    通常生成器是为迭代器产生数据的 --迭代器的一种实现

    与推导式语法一样

    (<表达式> for <变量> in <可迭代对象> if <逻辑条件>)

    返回一个生成器对象,也是可迭代对象

    但生成器并不立即产生全部元素,仅在用到元素的时候才生成,可以极大节省内存

    如果创建一个比较大的序列,生成器推导式将会比较复杂,一行表达式无法容纳,这是可以定义生成器函数。

    生成器函数与普通函数:

    生成器函数定义与普通函数相同,只是将return换成了yield

  • Python 函数 - 返回生成器

  • 如果函数要返回一系列结果,我们常见的方法就是将结果放到一份列表中,然后返回给调用者。比如下面的函数,返回字符串中每个单词的首字母在真个字符串中的索引:

    运行结果:

    上述的结果完全符合我们的预期,但 get_word_index 函数不够简洁。下面我们尝试使用生成器来实现:

    运行结果:

    改写之后,不仅运行结果符合要求,由于不需要和 result 列表交互,函数也变得非常简洁。下面我们就来详细学习下生成器吧~

    生成器是指使用 yield 表达式的函数,调用生成器函数时,它并不会真的运行,而是会返回迭代器。每次在这个迭代器上面调用内置的 next 函数时,迭代器就会把生成器推进到下一个 yield 表达式那里。生成器传给 yield 的值均会由迭代器返回给调用者。

    此外,如果输入量非常大,使用列表作为返回值,那么程序就有可能耗尽内存并崩溃。相反,使用生成器之后,则可以应对任意长度的输入数据。

    例如,下面这个生成器函数可以获取文件中单词的索引,而不管文件内容多大,该函数执行时消耗的内存,只由单行的文本长度决定:

    其中 test_ 中的内容如下:

    运行结果:

    下面这句话特别重要: 生成器函数返回的迭代器,是由状态的,及调用者不应该反复使用它 。我们那 word_index_iter 来说明:

    如果想重复调用,请将其封装成容器:

    运行结果:

    关于上述自定义容器的实现原理,我的另外一篇文章做了详细介绍,链接奉上:

  • ES6中generator(生成器)函数的应用

  • generator函数: 可以通过yield关键字,将函数挂起,为了改变执行流的顺序;

    generator函数作用:部署异步操作ajax,异步操作同步化;

    与普通函数的区别:

    1.function后面 函数名之前有个。

    2.只能在函数内部使用yield表达式,让函数挂起 。

    写法

    执行生成器函数

    ()调用时,将执行yield后面的语句,并在下一次调用next方法前继续等待,next(param)中的参数将返还给正在等待的yield

    应用场景:

    **1.部署异步操作ajax,异步操作同步操作 **

    2.异步加载页面

    切记:yield不仅可以阻塞当前执行顺序,也可以接受后面执行语句中调用next时所传递的参数

    最新文章 更多
    最新素材 更多
    公司介绍 网站地图 图片资讯
    Copyright © 2010-2022 山东找图网络科技有限公司  鲁ICP备18007836号-3  邮箱:15653358549@163.com