函数生成器-Python 函数 - 返回生成器
生成器推导式、生成器函数

生成器是用来创建数据序列的一种对象
使用它可以迭代庞大的序列,且不需要在内存中创建和存储整个序列
通常生成器是为迭代器产生数据的 --迭代器的一种实现
与推导式语法一样
(<表达式> 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时所传递的参数
-
果盘绘画图片大全简单创作方法快速制作技巧2024-01-02 16:57:54
-
小年插画图片创作方法快速制作技巧2024-01-02 16:57:20
-
小年绘画作品制作技巧2024-01-02 16:55:45
-
小年插画图片创作方法快速制作技巧2024-01-02 16:55:02
-
立春插画图片如何制作2024-01-02 16:54:19
-
立春插画图片创作方法快速制作技巧2024-01-02 16:53:32






扫描二维码添加客服微信
扫描二维码关注