一个普通的函数调用一般是这样的,从第一行代码开始执行,直到最后一行代码结束(中间有可能会遇到return,异常等会提前结束)。对于我们而言,这是一个再正常不过的函数标准执行流程,它只能返回一个至或者隐式的返回None。不过,有时可以创建能产生一个序列的函数还是有帮助的。例如,通过列表生成式,我们可以直接创建一个列表。但是,受到内存限制,列表容量肯定是有限的。而且,创建一个包含100万个元素的列表,不仅占用很大的存储空间,如果我们仅仅需要访问前面几个元素,那后面绝大多数元素占用的空间都白白浪费了。所以,如果列表元素可以按照某种算法推算出来,那我们是否可以在循环的过程中不断推算出后续的元素呢?这样就不必创建完整的list,从而节省大量的空间。在Python中,拥有这种能力的“函数”被称为生成器(generator )
- 创建生成器
只要把一个列表生成式的[]改成(),就创建了一个generator
>>> g = (x * x for x in range(10))
>>> g
<generator object <genexpr> at 0x1022ef630>
-
任何包含yield语句的函数
def flatten(nested): for sublist in nested: for element in sublist yield element
这篇主要简单介绍了下生成器以及怎么创建生成器的两种方法,接下来的系列会让大家对生成器有更深的了解以及它的作用。