只看Python生成器,真正留下他们的印象,但有没有什么东西不使用它们?我在考虑从文件读取过去的C编码,或者用户操作是区域。例如,生成器是否可以用来提示用户输入(基本数据输入?)和输入的调用函数过程?是否有任何性能或清理问题需要关注?Python生成器 - 什么不使用它
9
A
回答
12
一个与发电机的问题是,他们得到的 “消费”。这意味着如果您需要再次遍历序列,则需要再次创建生成器。
如果懒惰评估是一个问题,那么你可能不想要一个生成器表达式。例如,如果您想预先执行所有计算(例如,以便您可以释放资源),那么列表理解或for循环可能是最好的。
如果您使用psyco,则列表表达式和循环会显着提高速度,但对于生成器则不会。
此外相当明显,如果您需要事先获得序列的长度,那么您不需要生成器。
13
发电机不能很好地保持。
通常,您会遇到一个错误,试图保留一个生成器对象。
>>> def generatorForEvenKeys(aDictionary):
for k in aDictionary:
if k % 2 == 0: yield aDictionary[k]
>>> x = generatorForEvenKeys(someDictionary)
>>> pickle.dump(x,file('temp.dat','wb'))
获取您出现以下错误:
TypeError: can't pickle generator objects
1
当你想拥有的东西是iterateable,未持有在内存中的整个列表(这就是为什么xrange
支持更长的时间序列比在Python 2.x的range
,下)
当你需要你用一台发电机为了将整个“要输出的东西列表”加载到内存中,使用生成器没有太多意义 - 您可以直接返回一个列表。
对于(稍微)例如:
def my_pointless_generator(x):
thedata = range(x) # or thedata = list(range(x)) in Python 3.x
for x in thedata:
yield x
..can只是尽可能有效地重写..
def my_pointless_generator(x):
return range(x)
相关问题
- 1. 什么是python生成器?
- 2. Python生成器 - 什么都不产生或跳到下一个?
- 3. ES6为什么使用Express.js生成器?
- 4. 为什么我的生成器实现在Python中不正确?
- 5. 什么是GWT生成器?
- 6. 什么是CMake生成器?
- 7. 为什么不使用界面生成器
- 8. Python:为什么列表理解会产生一个生成器?
- 9. Ruby生成器与Python生成器
- 10. 生成JavaScript输入“表”,它为什么重新加载生成?
- 11. 使用numpy数组的Python生成器
- 12. qrcode生成器使用python for windows
- 13. 为什么我应该使用R.id,而不是它生成的代码?
- 14. 我想在jsp中使用pdfbox生成pdf,但它不工作为什么?
- 15. Python短url生成器
- 16. 为什么我必须使用变量来从Python生成器中获取值?
- 17. intn_t什么时候使用它,什么时候不使用
- 18. 什么是C#迭代器和生成器,以及如何利用它们
- 19. Python生成器遍历树
- 20. python html生成器
- 21. 为什么它不会生成第n个素数?
- 22. 它为什么不自动在Eclipse中生成方法注释?
- 23. 为什么这个python生成器根据keras没有输出?
- 24. Python中非生成器的正确术语是什么?
- 25. 为什么这个Python生成器/协程失去一个值?
- 26. 窗口生成器导出jar:为什么它看起来不同于eclipse
- 27. 实体框架查询生成器方法:为什么“它”而不是lambdas?
- 28. python sys.intern做什么,它应该在什么时候使用?
- 29. 为什么我不能使用它?
- 30. 为什么在tornado.gen中使用生成器?
+1好知道 – ebo 2009-06-07 13:15:39