码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2017-07-27 09:36:46      阅读:214      评论:0      收藏:0      [点我收藏+]

标签:pytho   stop   python   ati   gen   通过   list   过程   recent   

创建一个生成器的方法:

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
...
1
2
3
>>>

 

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

标签:pytho   stop   python   ati   gen   通过   list   过程   recent   

原文地址:http://www.cnblogs.com/liuzhipenglove/p/7242953.html

(1)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!