
正文
python的生成器函数 python函数之生成器函数
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
Python Generator(生成器)
什么是Python Generator(生成器) ?
Python Generator(生成器)用于在内存资源有限的情况下,把处理大数据的任务,分解为一段一段可以管理和处理的数据块(chunk),建立起数据流(data pipeline),从而一步一步的解决完大数据任务的技术。例如,假设有500G的数据待处理,内存只有32G,我们可以把数据分为200M的数据块,然后借助Python Generator技术,实现一边加载数据一边进行数据处理的效果。
生成器关键字yield 与 函数返回语句return的区别 :
return语句 终止函数运行并返回return语句后面的变量值;return语句后面的语句不执行。
Python生成器可以由以下两种方式创建:
相关问答
Q1: Python 函数 - 返回生成器
如果函数要返回一系列结果,我们常见的方法就是将结果放到一份列表中,然后返回给调用者。比如下面的函数,返回字符串中每个单词的首字母在真个字符串中的索引:
运行结果:
上述的结果完全符合我们的预期,但 get_word_index 函数不够简洁。下面我们尝试使用生成器来实现:
运行结果:
改写之后,不仅运行结果符合要求,由于不需要和 result 列表交互,函数也变得非常简洁。下面我们就来详细学习下生成器吧~
生成器是指使用 yield 表达式的函数,调用生成器函数时,它并不会真的运行,而是会返回迭代器。每次在这个迭代器上面调用内置的 next 函数时,迭代器就会把生成器推进到下一个 yield 表达式那里。生成器传给 yield 的值均会由迭代器返回给调用者。
此外,如果输入量非常大,使用列表作为返回值,那么程序就有可能耗尽内存并崩溃。相反,使用生成器之后,则可以应对任意长度的输入数据。
例如,下面这个生成器函数可以获取文件中单词的索引,而不管文件内容多大,该函数执行时消耗的内存,只由单行的文本长度决定:
其中 test_generator.txt 中的内容如下:
运行结果:
下面这句话特别重要: 生成器函数返回的迭代器,是由状态的,及调用者不应该反复使用它 。我们那 word_index_iter 来说明:
如果想重复调用,请将其封装成容器:
运行结果:
关于上述自定义容器的实现原理,我的另外一篇文章做了详细介绍,链接奉上:
Q2: python中randum.randum(10)是什么意思?
Python中random.random(10)的意思是生成一个介于0和1之间的随机小数,数字10是指随机数生成器的种子。random.random()函数是Python内置的随机数生成器函数,会生成一个0到1之间的随机小数,包括0,不包括1。如果参数不给定则使用系统当前时间(单位:秒)来作为种子随机数生成器。如果在生成随机数时使用相同的种子,则可以得到相同的随机数序列。
在本例中,数字10作为种子随机数生成器,是为了使得随机数生成器生成的随机数序列每次运行程序时都是一样的。如果想要每次生成不同的随机数,可以在每次运行代码时不输入种子参数,或者输入一个随机的种子值来实现。
关于python的生成器函数和python函数之生成器函数的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。






