python中的生成器
Posted 无荨
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python中的生成器相关的知识,希望对你有一定的参考价值。
什么是生成器?
通过列表生成式,我们可以直接创建一个列表。但是,受到内存限制,列表容量肯定是有限的。而且,创建一个包含100万个元素的列表,不仅占用很大的存储空间,如果我们仅仅需要访问前面几个元素,那后面绝大多数元素占用的空间都白白浪费了。所以,如果列表元素可以按照某种算法推算出来,那我们是否可以在循环的过程中不断推算出后续的元素呢?这样就不必创建完整的list,从而节省大量的空间。在Python中,这种一边循环一边计算的机制,称为生成器:generator。
eg:
def bar(): l = [‘a‘,‘b‘,‘c‘] for i in l: yield i res = bar() for i in res: print(i) >>> a >>> b >>> c def test(): list=[] for I in range(10): list.append(i) i+=1 return list res=test() print(res) >>> [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] def test(): for i in range(6): yield i res=test() for i in res: print(i) >>> 0 >>> 1 >>> 2 >>> 3 >>> 4 >>> 5
总结:
- 生成器是这样一个函数,它记住上一次返回时在函数体中的位置。对生成器函数的第二次(或第 n 次)调用跳转至该函数中间,而上次调用的所有局部变量都保持不变。
- 生成器不仅“记住”了它数据状态;生成器还“记住”了它在流控制构造(在命令式编程中,这种构造不只是数据值)中的位置。
- 只要函数里有yield关键字,那么函数名()得到的结果就是生成器,并且不会执行函数内部代码
- yield可以返回多个值,并且同一时间内存里值存储一个值,只能向后取值,不能向前取值
生成器的特点:
1、节约内存
2、迭代到下一次的调用时,所使用的参数都是第一次所保留下的,即是说,在整个所有函数调用的参数都是第一次所调用时保留的,而不是新创建的
以上是关于python中的生成器的主要内容,如果未能解决你的问题,请参考以下文章
在 Python 多处理进程中运行较慢的 OpenCV 代码片段
Python代码阅读(第13篇):检测列表中的元素是否都一样
Android 逆向使用 Python 解析 ELF 文件 ( Capstone 反汇编 ELF 文件中的机器码数据 | 创建反汇编解析器实例对象 | 设置汇编解析器显示细节 )(代码片段