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