创建一个生成器的方法:

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
>>>

最新文章

  1. cocos2dx3.0的CCCallFunc、CCCallFuncN
  2. 使用Guava EventBus构建publish/subscribe系统
  3. Android_helloworld
  4. seo伪原创技术原理分析,php实现伪原创示例
  5. Qt实现停靠功能
  6. laravel加入验证码类几种方法 &amp;&amp; Laravel引入第三方库的方法
  7. 学习总结 html图片热点,网页划区,拼接,表单
  8. JMeter2.13 连接 sql server
  9. 10款基于HTML5+CSS3实现的超酷源码动画
  10. ExtJS实战 01——HelloWorld
  11. Sharepoint中用treeview来显示组织机构的人员状态的webpart
  12. iOS: plist实例
  13. 程序员实用的 MySQL sql 语句
  14. Activity Window View的关系
  15. 【Java学习笔记之八】JavaBean中布尔类型使用注意事项
  16. 智能机器人chatbot论文集合
  17. Failed to start /etc/rc.d/rc.local Compatibility
  18. sdoi2018旧试题 证明
  19. loadrunner&#160;脚本优化-关联函数web_reg_save_param()函数详解
  20. GinKgoCTF-Crypto

热门文章

  1. android dialog style属性设置
  2. 【Python图像特征的音乐序列生成】关于音乐生成的思路转变
  3. JavaScript -- 操作符和逻辑运算
  4. 第二单元OO总结
  5. ☆☆☆Dojo中define和declare的结合使用
  6. Object类 任何类都是object类的子类 用object对象接收数组 object类的向上向下转型
  7. bzoj4666 小z的胡话
  8. 【java】类成员的访问限制关系
  9. ultraedit编辑器破解版下载
  10. pandas时间数据的集成处理