python 的一些高级特性(二)
生成器
通过列表生成式,我们可以直接创建一个列表。但是,受到内存限制,列表容量肯定是有限的。而且,创建一个包含 100 万个元素的列表,不仅占用很大的存储空间,如果我们仅仅需要访问前面几个元素,那后面绝大多数元素占用的空间都白白浪费了。在 Python 中,这种一边循环一边计算的机制,称为生成器:generator。我们可以通过 next()函数获得 generator 的下一个返回值,直到计算到最后一个元素,没有更多的元素时,抛出 StopIteration 的错误
1 | # 列表生成式 |
通常情况下我们不会直接使用next()
,我们会在for
循环中使用,所以,我们创建了一个 generator 后,基本上永远不会调用 next(),而是通过 for 循环来迭代它,并且不需要关心 StopIteration 的错误。如果推算的算法比较复杂,用类似列表生成式的 for 循环无法实现的时候,还可以用函数来实现.如:
1 | >>>g = (x * x for x in range(10)) |
斐波拉契数列用列表生成式写不出来,但是,用函数把它打印出来却很容易:
1 | def fib(max): |
迭代器
[越努力,越幸运!]