[python学习篇][廖雪峰][1]高级特性--创建生成器 方法1 a = (x for x in range(1,3)),,创建一个生成器的方法


创建一个生成器的方法:

for x in range(1,10000000) ,先生成一个列表[1........9999999] 如果我们只想要后面的几个元素,会发现浪费很多空间。所以,如果列表元素可以按照某种算法推算出来,那我们是否可以在循环的过程中不断推算出后续的元素呢?这样就不必创建完整的list,从而节省大量的空间。在Python中,这种一边循环一边计算的机制,称为生成器(Generator)。

要创建一个generator,有很多种方法。第一种方法很简单,只要把一个列表生成式的[]改成(),就创建了一个generator:

>>> L = [x * x for x in range(10)]>>> L[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]>>> g = (x * x for x in range(10))>>> g<generator object <genexpr> at 0x104feab40>

如何获取generator的元素,可以通过next(),就计算出下一个元素的值,直到计算到最后一个元素,没有更多的元素时,抛出StopIteration的错误。

>>> a = (x for x in range(1,4))>>> print type(a)<type ‘generator‘>>>> a.next()1>>> a.next()2>>> a.next()3>>> a.next()Traceback (most recent call last):  File "<stdin>", line 1, in <module>StopIteration>>>

另外一种方法是: for循环

>>> a = (x for x in range(1,4))>>> for x in a:print x...123>>>

[python学习篇][廖雪峰][1]高级特性--创建生成器 方法1 a = (x for x in range(1,3))

评论关闭