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