def numbers(mi, ma):
return [n for n in range(mi, ma + 1)]
def gen(xs):
return (x for x in xs)
example = gen(numbers(10, 20))
在這個例子中,gen
可以提高numbers
的迭代性能嗎?爲什麼不)?生成列表可以提高Python的性能嗎?
def numbersGen(mi, ma):
return gen([n for n in range(mi, ma + 1)]) # Generator from list comprehension?
Python能像Haskell一樣懶惰嗎?
Python不能像'Haskell'一樣懶,因爲它的運行原理是不同的。在顯示的代碼中,該列表是在*從數字返回之前創建的*它是用生成器包裝的返回列表。這同樣適用於「直接」形式。如果生成器在迭代過程中比迭代更快,我會非常懷疑。 – user2864740
我瞭解Python的基本操作順序;我想知道是否有優化好處或句法特殊。 – suchtgott
很少有Python可以做/優化這種情況 - 每一個表達式都被急切地評估爲一個值,因爲它被「執行」了,然後它才能夠提供下一個值。這與大多數常用語言(從JavaScript到C#)類似,與Haskell完全不同,它是一種純粹的函數式語言。 Python程序必須重新選擇懶惰,比如在沒有預先實現源的情況下使用生成器。 – user2864740